AngularJS:我需要从角度更新服务
发布时间:2020-12-17 08:14:18 所属栏目:安全 来源:网络整理
导读:我有一个名为’player’的服务,当flash对象完成加载时,我需要更新服务。 mySongPlayer.factory('player',function() {var isPlayerLoaded = false;var playerHolder = '';window.playerReady = function(thePlayer) { playerHolder = window.document[theP
我有一个名为’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()应该返回与您的应用程序相同的服务实例。你可能只是看到一个问题,让你认为你有一个不同的实例。 所以你需要做的是: >确保您从服务中放入范围的内容是对象引用。如果它是一个原始类型,它将不会是相同的引用,所以它不会更新。 以下是代码: 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电影播放器??。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |