$ scope.feeds обновляется, но представление не будет обновлять представление - PullRequest
0 голосов
/ 10 февраля 2019

$ scope.feeds обновляется в контроллере.Но представление не будет обновлять переменную.Переменная feeds находится в ng-repeat.

Угловой код:

$scope.openfeeds = function(category){
    $http({
        method: 'GET',
        url:  '/category/feeds/'+category.id
    }).then(function successCallback(response) {
         $scope.feeds = response.data;
         console.log($scope.feeds);
    });
};

HTML-код:

<div class="c-Subscribe">
        <div class="c-Subscribe_feeds" ng-repeat="feed in feeds" ng-controller="LinkController">
            @{{feed}}
        </div>
    </div>

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

<div class="c-modal_content">
        <div class="c-categoryTile_blocks">
            <div class="c-categoryTile" ng-repeat="category in categories">
                <div class="c-categoryTile_background" style="background-image: url('/images/biker-circuit-competition-63249.jpg');">
                    <a href="" ng-controller="LinkController" ng-click="openfeeds(category)">@{{ category.category }}</a>
                </div>
            </div>
        </div>
    </div>

Есть идеи, почему это не работает?

1 Ответ

0 голосов
/ 11 февраля 2019

Практически тот же ответ, который я дал на этот вопрос Как сохранить данные области при изменении состояний с помощью ui-router?

Вам необходимо понять, как работает наследование прототипов.Когда родитель помещает значение свойства в область с помощью

$scope.value = 'something';

В дочернем компоненте при доступе к $ scope.value цепочка наследования найдет $ scope.value.

Если дочернийустанавливает

$scope.otherValue = 'something';

Если следует по цепочке наследования, не находит значение otherValue и создает свойство в дочерней области, а не в унаследованном прототипе, поэтому родительский компонент и любые другие дочерние элементы родителя непосмотрите.

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

$scope.data = { value: 'something' };

Теперь, если дочерний объект помещает свойство в объект данных

$scope.data.otherValue = 'something';

Он ищет объект данных, находитоно находится в цепочке наследования, и поскольку вы добавляете свойство к экземпляру объекта, оно становится видимым для родителя и всех потомков родителя.

let parent = {
  value: 'some value',
  data: { value: 'some value' }
};

let child = Object.create(parent);

console.log(child.value); // Finds value on the prototype chain

child.newValue = 'new value'; // Does not affect the parent

console.log(parent.newValue);

child.data.newValue = 'new value'; // newValue is visible to the parent

console.log(parent.data.newValue);

Короткий ответ: никогда не вводить $ scope и использовать синтаксис controllerAs.

Для обмена данными между контроллерами вы используете сервис, который внедряется в оба контроллера.,У вас есть коллекция точек в службе и вы используете параметр маршрута, чтобы определить, какую точку должен использовать другой контроллер, или место в службе под названием currentSpot, установленное другим контроллером.

Службы - это одноэлементный объект, который высоздать на уровне модуля, а затем все контроллеры, которые запрашивают их в своем списке зависимостей, получают один и тот же экземпляр.Они являются предпочтительным способом обмена данными между контроллерами, иерархии $ scope неизбежно приводят к путанице, поскольку их прототипное наследование может сбивать с толку.Дочерняя область $ $ унаследована по прототипу от его родителя, кажется, что вы должны обмениваться данными, но когда дочерний контроллер устанавливает свойство, оно невидимо для родителя.

Вы изучаете устаревший способ углового программирования,Внедрение $ scope больше не рекомендуется.Посмотрите на использование компонентов.Компоненты являются оболочкой для контроллера с изолированной областью действия и с использованием синтаксиса contollerAs.Изолированные области видимости значительно упрощают понимание того, откуда поступают данные.

Посмотрите на мой ответ на этот вопрос

Попытка активировать флажок из контроллера, который находится в другом контроллере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...