Доступ к этому контроллеру при использовании контроллера как внутри шаблона директивы
Как я могу получить доступ This
контроллера внутри директивы и ее шаблона, когда не используется выделенная область?
app.controller('ChildCtrl', function() {
this.name = "Name from children";
});
1 ответ
Решение
Просто разобрать как controller as instance value
в вашу директивную область, как в этой простой демонстрации скрипки:
Посмотреть
<div ng-controller="MyCtrl as ctrl">
Hello, <span simple-directive data="ctrl.name"></span>!
</div>
Приложение AngularJS
var myApp = angular.module('myApp',[]);
myApp.controller('MyCtrl', function ($scope) {
this.name = 'Superhero';
});
myApp.directive('simpleDirective', function () {
return {
restrict: 'A',
scope: {
data: '='
},
template: '{{ data }}',
link: function (scope, elem, attrs) {
console.log(scope.data);
}
}
});
Другой подход - просто разобрать ваш контроллер в директиву, используя controller:'MyCtrl as ctrl'
как в этой демонстрационной скрипке.
Посмотреть
Hello, <span simple-directive></span>!
Приложение AngularJS
var myApp = angular.module('myApp',[]);
myApp.controller('MyCtrl', function ($scope) {
this.name = 'Superhero';
});
myApp.directive('simpleDirective', function () {
return {
restrict: 'A',
controller:'MyCtrl as ctrl',
template: '{{ ctrl.name }}'
}
});
Вы также можете проанализировать экземпляр контроллера отверстия в области видимости и получить к нему доступ, как в этой демонстрационной скрипке.
Посмотреть
<div ng-controller="MyCtrl as ctrl">
Hello, <span simple-directive ctrl="ctrl"></span>!
<br />
<input type="text" ng-model="ctrl.name">
</div>
Приложение AngularJS
var myApp = angular.module('myApp',[]);
myApp.controller('MyCtrl', function ($scope) {
this.name = 'Superhero';
});
myApp.directive('simpleDirective', function () {
return {
restrict: 'A',
scope: {
ctrl: '='
},
template: '{{ ctrl.name }}',
link: function (scope, elem, attrs) {
}
}
});