I have a service called 'player' and I need to update the service when a flash object is finished loading.
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: ''
});
});
I know how to access the service using
angular.element(DOMElement).injector().get('player')
but it returns a new instance of 'player' while I need to update the instance already created in the module. Is there a way to do this? I only want one instance of the player, but I need to initialize it from outside javascript.
With it you can mix and match AngularJS and Angular components in the same application and have them interoperate seamlessly. That means you don't have to do the upgrade work all at once, since there is a natural coexistence between the two frameworks during the transition period.
var mysql = require('mysql'); var connection = mysql. createConnection({ host: 'localhost', user: '', password: '', database: 'copedb' }); connection. connect(); var cope = { author: 'XYZXYZ', title: 'Testing Node', body: 'Node JS' }; var query = connection. query('insert into cope set ?
Business Benefits of Migrating from AngularJS to Angular Mobile-Driven Approach: Angular allows developers to build lightweight applications that offer faster downloads. And, this is one of the many reasons why Angular utilizes “lazy scripting”. This means that it would load particular modules only when needed.
Well, I can't really see all of what you're doing, but you're probably about 1/2 way there.
Here is a working plunk of what I'm about to describe
injector.get()
should be returning the same instance of Service as what's in your app. You're probably just seeing an issue that makes you think you have a different instance.
So what you need to do is:
angular.element(DOMElement).scope()
and then call $apply()
on it.Here's the code:
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)
Other thoughts:
$window
into your service, rather than use the window object, to maintain the testability of your service.If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With