#angularjs #angularjs-scope
#angularjs #angularjs-область видимости
Вопрос:
Как я могу заставить привязку работать для свойств объекта. Например, в моем контроллере у меня есть:
$scope.reviews = {
rating_summary: 4,
items: [ { title: 'A Title'}, etc... ]
}
И, на мой взгляд:
<li ng-repeat="review in reviews.items">
Теперь, всякий раз, когда я изменяю переменные reviews в контроллере, ничего не обновляется:
$scope.reviews = [new updated reviews]
Вероятно, из-за того, что angular прослушивает изменения в старой ссылке $ scope.reviews.
Есть два решения для работы привязки, но оба не очень умные:
- Прикрепите элементы непосредственно к области видимости, так было бы
$scope.items = $scope.reviews.items
, теперь всякий раз, когда элементы изменяются, они будут обновляться. - Пользователь angular.copy для сохранения ссылки на назначение, поэтому
angular.copy({items: []}, $scope.reviews);
Существуют ли какие-либо другие решения для достижения этой цели, отличные от приведенных выше.
Комментарии:
1. Это должно работать как #scope.reviews = [] новые обновленные обзоры]… проблема должна быть где-то в другом месте … и не могли бы вы создать plunker для демонстрации…
2. это сработало бы, если бы scope.reviews был массивом, но это объект, а массив является одним из ключей объекта, т.е. $scope.reviews = { rating_summary: 5, items: [ item1, item2, ..] }
3. Проверьте мой пример: jsfiddle.net/or66quta
4. @PoyrazYilmaz извини, чувак, я виноват
Ответ №1:
Это должно сработать, должна быть какая-то ошибка при обновлении объекта / элементов, пожалуйста, обратитесь к этому плунжеру
$scope.reviews = {
rating_summary: 4,
items: [ { title: 'A Title'}, { title: 'B Title'} ]
};
$scope.changeItems = function(){
$scope.reviews.items = [ { title: 'A Title'}, { title: 'B Title'},
{ title: 'C Title'}];
};
$scope.changeObject = function(){
$scope.reviews = {
rating_summary: 4,
items: [ { title: 'A Title'}, { title: 'B Title'}, { title: 'D Title'} ]
};
Комментарии:
1. это действительно работает, у меня были проблемы с другими частями кода, извините