我在与父控制器沟通子控制器时遇到问题,
我拥有一个将数据推送到ngrepeat中包含的父数组的函数。
推送父数组后,正确附加了父数组,并且其长度在父控制器中正确显示,但是ngrepeat不会刷新。
<div ng-controller="parentCtrl">
This works {{shared.arr.length}} <br/>
This works Too{{shared.arr|json}} <br/>
<div ng-repeat="a in shared.arr">
{{a}} This dont, it only show old data.
</div>
<section ng-contoller="childCtrl">
<button ng-click="test()">Test</button>
</section>
</div>
angular.module('testApp')
.controller('parentCtrl', function ($scope) {
$scope.shared = {arr:[1,2]};
});
.controller('childCtrl', function ($scope) {
$scope.test = function(){$scope.shared.arr.push(4);}
});
最佳答案
angular.module('testApp', [])
.controller('parentCtrl', ['$scope', parentCtrl])
.controller('childCtrl', ['$scope', childCtrl]);
function parentCtrl ($scope) {
$scope.shared = {
arr: [1, 2]
};
}
function childCtrl ($scope) {
$scope.test = function (arr) {
arr.push(4);
}
}
<div ng-controller="childCtrl">
<button ng-click="test(shared.arr)">Test</button>
</div>
http://jsfiddle.net/kikill/zhzb3pxh/
试试这个代码。
有两个错误:
1)ng-controller =“ childCtrl”,而不是ng-contoller =“ childCtrl”
2)您传入了“测试”函数的父变量。在这个例子中,它可能会犯很多错误,但现在并没有。
使用“ controller as”语法。您可以阅读有关此here的信息。