ng-repeat - не обновлять представление при изменении массива в контроллере, используя контроллер в качестве синтаксиса

0

У меня есть следующая функция внутри контроллера:

app.controller("myCtrl", function(myServ, $scope){
  var ctrlScope = this;
  ctrlScope.myData = [];

  function getData(){
    myServ.getData().then(function(data){
      $scope.$evalAsync(function(){
        ctrlScope.myData = data;
      });
    });
  }

  getData();  // myData is initialised properly

  ctrlScope.update = function(){
    // Data has already changed in backend
    getData();   //myData inside controller is updated but ng-repeat is not able to show on the view the updated array
  };
});

HTML:

<div data-ng-controller="myCtrl as mc">
  <span data-ng-repeat="d in mc.myData">{{d.name}}</span>
  <button data-ng-click="mc.update()"> Update </button>
</div>

getData() инициализирует ng-repeat правильно, но не может обновить представление, даже если контроллер обновил данные.

  • 0
    Как вы обновляете данные? это с третьей стороной, как jQuery?
  • 0
    Он обновляется с помощью какого-то другого действия, а не отображается здесь, чтобы прояснить вопрос.
Показать ещё 2 комментария
Теги:
angularjs-ng-repeat

2 ответа

0

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

function getData(){
    myServe.getData().then(function(data){
        ctrlScope.myData.length = 0;
        ctrlScope.myData.push.apply(ctrlScope.myData, data);
    });
}
  • 0
    Да, я пробовал это раньше, но не повезло.
0

Добавить $scope().apply()

ctrlScope.update = function(){
        // Data has already changed in backend
        getData();   //myData inside controller is updated but ng-repeat is not able to show on the view the updated array

        $scope().apply();
      };
  • 0
    Я забыл добавить $ scope. $ EvalAsync в код, он в основном ставит в очередь обновление в текущем цикле дайджеста. $ scope. $ apply не требуется, потому что мы не выходим за пределы angular. Это требуется, когда мы делаем обновление вне области видимости angular, что здесь не является сценарием.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню