Я думаю, что я просто потерял несколько часов до точки в AngularJS.AngularJS: привязка данных и точка-обозначение
This Plunker демонстрирует проблему, которая до сих пор раздражает меня:
app.controller('MainCtrl', function($scope, ValueService) {
$scope.obj= ValueService.getObject(); // Output: {"string": "New!!!"}
$scope.val = ValueService.getVal(); // Output: "init"
ValueService.setVal();
})
.service('ValueService', function(){
var output= {string: 'init'};
this.setVal = function(val){
output.string = 'New!!!';
};
this.getObject = function(){
return output;
};
this.getVal = function(){
return output.string;
};
return this;
});
Я знаю, что я должен использовать объекты при использовании ng-model
(дот-нотация помогает решению проблем эталонных при поиске вложенных областей). Однако я не знал, что это относится и к простейшему случаю, подобному этому. Я был еще более удивлен, потому что ссылка на мой объект остается в такте, если я использовать массивы (и изменить его с нажатием/сращивания): another Plunker
Может кто-нибудь объяснить, почему именно привязка данных не работает для value
больше, когда я переназначить Это? Есть ли способ привязки к значению без передачи объекта-обертки из службы?
Создайте плункер, который показывает, что привязка не работает при переназначении. Тогда мы можем помочь. –
OP уже разместил ссылку на ссылку _another Plunker_. – Jai
Ссылка на «другой Plunker» может быть более понятной, но на самом деле вызов 'setVal()' в первом Plunker уже является переназначением, которое не было захвачено '$ scope.val' –