bin*_*nce 1 javascript angularjs angularjs-scope angularjs-factory
我有一个非常简单的例子
(也可以在这个小提琴上找到:http://jsfiddle.net/depov5w6/)
我有2个工厂,一个返回一个具有属性'data'的对象(绑定到控制器的范围),另一个工厂有两个方法:populateData和pushData.populateData将dataSource.data的值设置为新值.pushData将一个新值推送到dataSource.data
angular.module("app",[])
.factory('dataSource', function() {
return {
data: ["Init Data"]
};
})
.factory('dataModifier', function(dataSource) {
return {
populateData: function() {
dataSource.data = ["data from populateData"];
},
pushData: function() {
dataSource.data.push("new data from push data");
}
}
})
.controller('dataCtrl', function($scope, dataSource, dataModifier) {
$scope.data = dataSource.data;
$scope.populateData = dataModifier.populateData;
$scope.pushData = dataModifier.pushData;
})
Run Code Online (Sandbox Code Playgroud)
在我看来,我有一个调用pushData的按钮和另一个调用populateData的按钮.我还显示$ scope.data
<div ng-app="app">
<div ng-controller="dataCtrl" class="container">
<p>Data: {{data}}</p>
<button ng-click="pushData()">Push Data</button>
<button ng-click="populateData()">Set Data To New Value</button>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
如果您查看小提琴,如果单击"推送数据"按钮,新值将被推送到阵列上.但是,如果单击"将数据设置为新值",则不会发生任何事情,并且后续单击以推送数据不会执行任何操作.我想我明白,当你点击填充数据时,你会丢失对$ scope.data绑定的数组的引用,但为什么$ scope没有意识到dataSource.data有一个新值?我该如何解决这个问题?我尝试将数据作为私有变量,并使用getter和setter,但这没有做任何事情.
我很欣赏任何见解.
不是将数据分配给作用域,而是将整个数据源对象分配给作用域然后使用它.
类似的东西:http://jsfiddle.net/depov5w6/1/
.controller('dataCtrl', function($scope, dataSource, dataModifier) {
$scope.dataSource = dataSource;
$scope.populateData = dataModifier.populateData;
$scope.pushData = dataModifier.pushData;
});
Run Code Online (Sandbox Code Playgroud)
<div ng-app="app">
<div ng-controller="dataCtrl" class="container">
<p>Data: {{dataSource.data}}</p>
<button ng-click="pushData()">Push Data</button>
<button ng-click="populateData()">Set Data To New Value</button>
</div>
Run Code Online (Sandbox Code Playgroud)
这件事有效的原因是因为角度的脏检查工作方式.它比较整个对象以检测是否有任何变化.将变量绑定到作用域时,它会在其上创建监视.如果将对象分配给作用域,则它会检查对象的值以监视属性值的任何更改.所以你需要把观察放在对象的属性上.
| 归档时间: |
|
| 查看次数: |
753 次 |
| 最近记录: |