1

Пользовательская директива была создана в AngulerJS 1. Она имеет выделенную область и обладает информацией (получает данные от API-интерфейса сервера). Его определение выглядит следующим образом:Директива по изоляции AngularJS - данные не привязаны к .controller (но работает в .link)

var dirJobView = function ($location, serviceData) { 
    return { 
     restrict: 'A', 
     templateUrl: '/app/views/Jobs/Item.html', 
     scope: { 
      itemid: "@" 
     }, 
     controller: ['$scope', function ($scope) { 
      scope = $scope; 
      // does not work - data is not displayed in view: 
      serviceData.get('jobs', scope.itemid).then(function (data) { 
       scope.dataJobView = data; 
      }); 
     }], 
     link: function (scope, elem, attrs, ctrl) { 

     } 
    }; 
} 

выше не работает - данные загружены, но вид не отображает его. Точнее, он отображает его только в том случае, если в браузере принудительно «Очистить кеш и жесткий перезапуск».

Однако, это работает perfeclty хорошо, если я перееду вызов службы к функции связи, как так:

var dirJobView = function ($location, serviceData) { 
    return { 
     restrict: 'A', 
     templateUrl: '/app/views/Jobs/Item.html', 
     scope: { 
      itemid: "@" 
     }, 
     controller: ['$scope', function ($scope) { 
      scope = $scope; 

     }], 
     link: function (scope, elem, attrs, ctrl) { 
      // Moved from controller, now works 
      serviceData.get('jobs', scope.itemid).then(function (data) { 
       scope.dataJobView = data; 
      }); 
     } 
    }; 
} 

Из того, что я понимаю, функция ссылки предназначена для манипулирования DOM, а контроллер предназначен для вызова служб и определения поведения. Вызов служебных данных должен быть помещен в контроллер, не так ли?

Почему это работает так, как это делается?

+0

просто попробовать 'объем $ применяется()' в контроллере после 'scope.dataJobView = data' и проверить, если изменения чего-либо.. – Sravan

ответ

0

Обнаружена проблема. Отсутствовал «var» в «scope = $ scope;». Защита корпус контроллера должен быть такой:

controller: ['$scope', function ($scope) { 
      var scope = $scope; 
      // does not work - data is not displayed in view: 
      serviceData.get('jobs', scope.itemid).then(function (data) { 
       scope.dataJobView = data; 
      }); 
     }], 

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

  • Нет связанных вопросов^_^