Модель Angularjs не обновляет вид при изменении дочернего контроллера

117
13

Я должен обновить параметр родительского контроллера из вложенного контроллера. Я могу прочитать параметр, но когда я его изменяю, он не обновляется в представлении (веб-странице)... help plz :)

Это мой js:

    app.controller('signalCtrl', [ '$scope', 'DB', function($scope, service) {
this.address = null;
}]);

app.controller('reportMap', ['$scope', function($scope) {
this.updateParent = function() {
$scope.$parent.tab.address = 'something';
}
}]);

И это мой HTML:

<div ng-controller="signalCtrl as signal">
<input type="text" ng-model="signal.address">
[...]
<div ng-controller="reportMap as map">
[...]
</div>
</div>

спросил(а) 2021-01-25T22:23:03+03:00 5 месяцев назад
1
Решение
98

Свойство address в родительском контроллере не привязано к $scope, но к this объекту, поэтому вы даже не можете достичь этого свойства таким образом. Я предлагаю вам перенести вашу функцию обновления на родительский контроллер:

app.controller('signalCtrl', [ '$scope', 'DB', function($scope, service) {
var self = this;
self.address = null;
self.update = function(newValue) {
self.address = newValue;
}
}]);

app.controller('reportMap', ['$scope', function($scope) {
var self = this;
self.someValue = 'something';
}]);

HTML:


<div ng-controller="signalCtrl as signal">
<input type="text" ng-model="signal.address">
[...]
<div ng-controller="reportMap as map">
<button type="button" ng-click="signal.update(map.someValue)">Click!</button>
[...]
</div>
</div>

Вы не вызываете функцию обновления в представленном коде, поэтому я добавил кнопку, чтобы показать, как ее использовать.

ответил(а) 2021-01-25T22:23:03+03:00 5 месяцев назад
45

Ок, вероятно, ошибка в тексте HTML:

(function () {
var app = angular.module('segnalazioni', ['filters', 'smart-table', 'smart-table-server']);

app.controller('nuovaSegnalazioneCtrl', [ '$scope', 'DB', function($scope, service) {
var self = this;
this.activatedTab = "tab_animale";
this.chipNumber = null;
this.indirizzo = 'ind';

this.setIndirizzo = function() {
self.indirizzo = "VIA ROMA";
console.log("AGGIORNAMENTO INDIRIZZO");

}

Я вызываю setIndirizzo из дочернего элемента (я не передаю значение, которое я знаю, но это не проблема): в консоль я читаю "AGGIORNAMENTO INDIRIZZO", но значение в VIEW не меняется...

это ссылка на полный html файл. https://www.dropbox.com/s/gzlm997ub8fot7r/html.txt?dl=0

ответил(а) 2021-01-25T22:23:03+03:00 5 месяцев назад
45

использовать сигнал вместо вкладки

app.controller('reportMap', ['$scope', function($scope) {
this.updateParent = function() {
$scope.$parent.signal.address = 'something';
}
}]);

см. эту ссылку: https://plnkr.co/edit/RhQLfBy2heecJDuCcq9s?p=preview

ответил(а) 2021-01-25T22:23:03+03:00 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема