Saturday, 29 July 2017

angularjs - getting and setting value in factory in angualrjs



This is my factory:



.factory('userService',()){
var user = {};
return {

getFirstname : function () {

return user.firstname;
},

setFirstname : function (firstname) {
user.firstname = firstname;
}

}



And I'm using this service in my two controllers MainCtrl and AccountEditCtrl
I'm using my getFirstname() in my MainCtrl and setFirstname in AccountEditCtrl



.controller('MainCtrl',['userService', function(userService){
$scope.userName = userService.getFirstName();
}]);

.controller('AccountEditCtrl',['userService', function(userService){
userService.setFirstname("New First Name");
}]);



My problem is that when I use the userService.setFirstname() the $scope.userName don't change in MainCtrl.


Answer



In some case $watch is not working with factory object. Than you may use events for updates.



 app.factory('userService',['$rootScope',function($rootScope){
var user = {};
return {


getFirstname : function () {
return user.firstname;
},

setFirstname : function (firstname) {
user.firstname = firstname;
$rootScope.$broadcast("updates");
}

}

}]);
app.controller('MainCtrl',['userService','$scope','$rootScope', function(userService,$scope,$rootScope) {
userService.setFirstname("bharat");
$scope.name = userService.getFirstname();
$rootScope.$on("updates",function(){
$scope.name = userService.getFirstname();
});
}]);

app.controller('one',['userService','$scope', function(userService,$scope) {

$scope.updateName=function(){
userService.setFirstname($scope.firstname);
}
}]);


Here is a working example


No comments:

Post a Comment

casting - Why wasn't Tobey Maguire in The Amazing Spider-Man? - Movies & TV

In the Spider-Man franchise, Tobey Maguire is an outstanding performer as a Spider-Man and also reprised his role in the sequels Spider-Man...