Пользовательская директива была создана в 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, а контроллер предназначен для вызова служб и определения поведения. Вызов служебных данных должен быть помещен в контроллер, не так ли?
Почему это работает так, как это делается?
просто попробовать 'объем $ применяется()' в контроллере после 'scope.dataJobView = data' и проверить, если изменения чего-либо.. – Sravan