This 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.
};
}
]);
UPDATE :Plunkr has been updated 좋아, 내가 지금 가고 있지만 어떻게 내 코드에서 문제를 해결하는 방법 무엇을 이해합니다. 실제 코드에서는 데이터를 AJAX 호출의 결과로 바꿉니다. 이 경우에 몇 가지 옵션이 있다고 가정합니다. vm.list.length = 0
, push()
AJAX 호출에서 반환 된 각 항목을 보내지 만 무시 무시하게 비효율적 인 것 같습니다. 어떻게 이런 일이 일반적으로 이루어 집니까? 대신 clear()
방법으로 배열을 다시의
- : 당신이 가까이 모달 사용 모달을 닫고 데이터를 전달할 때 속성
result
으로 사용할 수 모달 약속하지만
체인 이 수수께끼에 대답 할 수 있습니다, 당신은 무슨 일이 일어나는지 이해할 것입니다 :'var a = {id : 1}, b = a; b = {id : 2};''a'의 값은 무엇입니까? :) – bmleite
나는 대답이'{id : 1}'라고 가정하고있다. 이것은'b = {id : 2}'가 b를 완전히 새로운 객체로 설정하고 있기 때문에, 'b'가 'a'의 참조와 'b'의 참조를 새로운 객체의 참조로 변경합니다. 내가 닫을 까? –
예! 그게 전부 야;) – bmleite