LINUX.ORG.RU

История изменений

Исправление Y, (текущая версия) :

Как-то вот так. Только $http должна быть определена.

link: function(scope, elem, attr, ctrl) {
          var divElem = elem[0];

          var ngElem = angular.element(divElem);

          elem.bind('click', function() {
              if (scope.category.selected !== undefined) {
                  $http.get('api_method').then(function(result) {
                      scope.items = result.data;
                      console.log(scope.items);
                      scope.$apply();
                  });
              } else {
                  console.log('Something wrong');
              }
          });
      }

scope.items ведь обновляется в коллбеке http.get, асинхронно, к тому времени scope.$apply, в который ты передавал свою функцию уже завершился (тот scope.$apply, который я убрал). А его надо вызывать по завершению изменения данных или передавать в коллбек что-то синхронное.

Можно, и, пожалуй, лучше, сделать вот так:

link: function(scope, elem, attr, ctrl) {
          var divElem = elem[0];

          var ngElem = angular.element(divElem);

          elem.bind('click', function() {
              if (scope.category.selected !== undefined) {
                  $http.get('api_method').then(function(result) {
                      scope.$apply(function() {
                          scope.items = result.data;
                      });
                  });
              } else {
                  console.log('Something wrong');
              }
          });
      }

Исправление Y, :

Как-то вот так. Только $http должна быть определена.

link: function(scope, elem, attr, ctrl) {
          var divElem = elem[0];

          var ngElem = angular.element(divElem);

          elem.bind('click', function() {
              if (scope.category.selected !== undefined) {
                  $http.get('api_method').then(function(result) {
                      scope.items = result.data;
                      console.log(scope.items);
                      scope.$apply();
                  });
              } else {
                  console.log('Something wrong');
              }
          });
      }

scope.items ведь обновляется в коллбеке http.get, асинхронно, к тому времени scope.$apply, в который ты передавал свою функцию уже завершился (тот scope.$apply, который я убрал). А его надо вызывать по завершению изменения данных или передавать в коллбек что-то синхронное.

Можно, и, пожалуй, лучше, сделать вот так:

link: function(scope, elem, attr, ctrl) {
          var divElem = elem[0];

          var ngElem = angular.element(divElem);

          elem.bind('click', function() {
              if (scope.category.selected !== undefined) {
                  $http.get('api_method').then(function(result) {
                      
                      scope.$apply(function() {
                          scope.items = result.data;
                      });
                  });
              } else {
                  console.log('Something wrong');
              }
          });
      }

Исправление Y, :

Как-то вот так. Только $http должна быть определена.

scope.items ведь обновляется в коллбеке http.get, асинхронно, к тому времени scope.$apply, в который ты передавал свою функцию уже завершился (тот scope.$apply, который я убрал). А его надо вызывать по завершению изменения данных или передавать в коллбек что-то синхронное.

link: function(scope, elem, attr, ctrl) {
          var divElem = elem[0];

          var ngElem = angular.element(divElem);

          elem.bind('click', function() {
              if (scope.category.selected !== undefined) {
                  $http.get('api_method').then(function(result) {
                      scope.items = result.data;
                      console.log(scope.items);
                      scope.$apply();
                  });
              } else {
                  console.log('Something wrong');
              }
          });
      }

Исходная версия Y, :

Как-то вот так. Только $http должна быть определена.

link: function(scope, elem, attr, ctrl) {
          var divElem = elem[0];

          var ngElem = angular.element(divElem);

          elem.bind('click', function() {
              if (scope.category.selected !== undefined) {
                  $http.get('api_method').then(function (result) {
                      scope.items = result.data;
                      console.log(scope.items);
                      scope.$apply();
                  });
              } else {
                  console.log('Something wrong');
              }
          });
      }