2014-03-26 38 views
-2

爲什麼globalObj得到修改,爲什麼這個修改對secondo控制器有影響?AngularJS - 如何做一個全局對象,而不是溝通到不同的控制器其修改?

var globalObj = [{..},{..},{..}]; 

mymod = angular.module("app", []); 

//CONTROLLER "first" 
mymod.controller("first", function($scope){ 
    $scope.myobj = globalObj; 
    //do something with $scope.myobj, as add, remove or modify some element 
}); 

//FACTORY 
mymod.factory("myfact", function(){ 
    objfact = function(someparam){ 
     this.obj = globalObj; 
     //do something with this.obj 
    } 
    return objfact; 
}); 

//CONTROLLER "second" 
mymod.controller("second", function($scope, myfact){ 
    $scope.otherMyObj = globalObj; 
    myfact.objfact($scope.otherMyObj); 
}); 
+1

您正在分配globalObj的引用。任何人都可以改變它,任何參考的人都會受到影響。 – Chandermani

回答

1

因爲你將兩個本地控制器變量(myObjmyOtherObj)分配給相同的全局變量。請注意,以下是參考副本,它將創建具有相同屬性的新變量:

var myObj = someGlobalObj; 

您既可以使用angular.copy或更好的辦法是引入返回您服務該對象,而不是將其暴露在全局(JavaScript)範圍內。

0

使用服務

sampleApp.service('sharedProperties', function() { 

     var property = 'First'; 

     return { 
      getProperty: function() { 
       return property; 
      }, 
      setProperty: function(value) { 
       property = value; 

      } 
     } 
}); 

在控制器調用 sharedProperties.getProperty()來獲取值

sharedProperties.setProperty(值)來設定值

相關問題