这个 Plunkr演示了我遇到的问题。
我有一个在对话框和它的父页面中都显示的数组。在对话框范围内修改该数组工作得很好,但是当我完全替换数组时,更改只能在对话框范围内看到。这是为什么?
我的代码,以防 Plunkr 吃掉它:
angular.module('app', ['ui.bootstrap'])
.controller('demoController', function($modal) {
var vm = this;
vm.message = 'Binding Problems';
vm.list = [1,2,3];
vm.modal = function() {
$modal.open({
controller: 'modalController as vm',
templateUrl: 'modal.html',
resolve: {
list: function() {
return vm.list;
}
}
});
};
})
.controller('modalController', ['$modalInstance', '$scope', 'list',
function($modalInstance, $scope, list) {
var vm = this;
vm.list = list;
vm.modalText = 'Modal Text';
vm.cancel = function() {
$modalInstance.dismiss();
};
vm.clear = function() {
vm.list = []; // This does not propagate to the parent controller...
};
vm.add = function() {
vm.list.push(4); // ...but this does.
};
}
]);
更新: Plunkr 已更新好的,所以我了解现在发生了什么,但不知道如何在我的代码中修复它。在我的实际代码中,我将数据替换为 AJAX 调用的结果。我想在这种情况下我有几个选择,比如vm.list.length = 0
then push()
ing 从 AJAX 调用返回的每个项目,但这似乎非常低效。这通常是如何完成的?