2016-06-01 3 views
1

У меня есть контроллер с именем dataController, две услуги, названный dataHttpServices и dataLocalServices и шаблон HTML, некоторые директивы.AngularJs массив не Binding к шаблону

В моем шаблоне html у меня есть две разные вкладки, которые используют один и тот же контроллер и добавляют элемент к списку в моем контроллере из двух разных мест.

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

Я не знаю. Какая у меня ошибка, помогите пожалуйста. В коде;

Html;

<div 
    class="metadataSelect" 
    layout="column" 
    ng-model="selectedItems" 
    ng-show="selectedItems.length > 0">         
    <div layout="row" ng-repeat="item in selectedItems"> 
     {{item.Name}} 
    </div> 
</div> 

Это контроллер;

$scope.addSelectedItem = function (selectedItem) { 
    var found = false; 
    var self = this; 

    dataLocalService.addSelectedItem(selectedItem); 
    $scope.selectedItems = dataLocalService.getSelectedItems(); 
}; 

И вот услуга;

this.selectedItems = []; 

this.addSelectedItem = function (item) { 
    this.selectedItems.push(item); 
}; 

this.getSelectedItems = function() { 
    return this.selectedItems; 
}; 

Я называю addSelectedItem из сферы в событии нажатия кнопки два разных с нг нажмите.

Если я впервые добавлю элемент, нажмите первую кнопку и нажмите вторую кнопку (сначала нажмите первую кнопку), кнопка привязывает массив к div правильно.

Но когда я добавляю элемент, щелкнув вторую кнопку перед нажатием первой кнопки, массив не привязывается к div.

После добавления некоторых элементов в массив нажмите вторую кнопку, когда я нажимаю первую кнопку, привязываю все элементы к div. Например, три элемента одновременно, но не привязываются, не нажимая первую кнопку.

Каковы мои ошибки. Спасибо за помощь.

+1

Показывая только фрагменты кода, трудно определить контекст («я» в контроллере и «это» в службе). Вероятно, корень вашей проблемы находится в коде, который мы не видим. Пожалуйста, предоставьте весь соответствующий код ... плункер будет очень приятным. – jbrown

+0

Почему у вас есть что 'ng-model =" selectedItems "' в div? .metadataSelect "? –

+0

, что сказал ГабриэльХоболд, а также почему вы сохраняете '$ scope.selectedItems = dataLocalService.getSelectedItems();' inside '$ scope.addSelectedItem'? – apieceofbart

ответ

0

Я решил использовать его с использованием $ scope. $ Watch. И я думаю, что проблема заключается в том, что их область различна, потому что я дважды создаю контроллер с ng-контроллером. Вот фрагмент кода, который я нашел для его решения.

$scope.$watch('selectedItems', function() { 
    $scope.selectedItems = $metadataLocalService.getSelectedItems(); 
}); 

Это решает мою проблему. Потому что часы отслеживают соответствующие изменения данных и т. Д.

Смежные вопросы