AngularJS:我需要从角度更新服务

前端之家收集整理的这篇文章主要介绍了AngularJS:我需要从角度更新服务前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个名为’player’的服务,当flash对象完成加载时,我需要更新服务。
mySongPlayer.factory('player',function() {

var isPlayerLoaded = false;
var playerHolder = '';

window.playerReady = function(thePlayer) {
    playerHolder = window.document[thePlayer.id];
    addListeners();
    isPlayerLoaded = true;
}

var flashvars = {
    file:"",autostart:"true",skin: "/skins/glow/glow.zip",}

var params = {
    allowfullscreen:"false",allowscriptaccess:"always"
}

var attributes = {
    id:"player1",name:"player1"                    
}

swfobject.embedSWF("/player.swf","player_placeholder","100%","40","9.0.115",false,flashvars,params,attributes);

var playObj;
return playObj || (playObj = {
    currentId: 'test',currentUrl: 'url',playerHolder: ''
});
});​

我知道如何访问服务使用

angular.element(DOMElement).injector().get('player')

但是当我需要更新已经在模块中创建的实例时,它会返回一个新的“player”实例。有没有办法做到这一点?我只想要一个玩家的实例,但是我需要从外部的javascript初始化它。

那么,我看不到你正在做的所有事情,但是你可能大概是在那里的1/2路。

Here is a working plunk of what I’m about to describe

inject.get()应该返回与您的应用程序相同的服务实例。你可能只是看到一个问题,让你认为你有一个不同的实例。

所以你需要做的是:

>确保您从服务中放入范围的内容是对象引用。如果它是一个原始类型,它将不会是相同的引用,所以它不会更新。
>确保使用angular.element(DOMElement).scope()获取角度元素的范围,然后调用$ apply()。

以下是代码

app.controller('MainCtrl',function($scope,myService) {
  // Set a var on the scope to an object reference of the
  // (or from the) service.
  $scope.myService = myService;
});

app.factory('myService',function(){
  return {
    foo: 'bar'
  };
});

//do a little something to change the service externally.
setTimeout(function(){
  //get your angular element
  var elem = angular.element(document.querySelector('[ng-controller]'));

  //get the injector.
  var injector = elem.injector();

  //get the service.
  var myService = injector.get('myService');

  //update the service.
  myService.foo = 'test';

  //apply the changes to the scope.
  elem.scope().$apply();
},2000)

其他想法:

>您可能需要将$ window注入到您的服务中,而不是使用窗口对象来维护您的服务的可测试性。>一个指令可能是更好的DOM操作选择,比如创建一个Flash电影播放器​​。

原文链接:https://www.f2er.com/angularjs/144568.html

猜你在找的Angularjs相关文章