Я переключаюсь с angularJS 1.0 на 1.2, и у меня возникли проблемы с назначением контроллера директиве с чистой областью без определения контроллера в моем html с ng-контроллером.Назначение контроллера из директивы angularjs 1.2
рассмотрим следующий сценарий:
var myApp=angular.module('myApp',[])
.controller('parentCtrl',function($scope,$element,$attrs) {
$scope.helloworld = function(){
console.log('hello world from ParentCtrl controller')
}
})
.controller('childCtrl',function($scope,$element,$attrs) {
$scope.helloworld = function(){
console.log('hello world from ChildCtrl controller')
}
})
.directive('ngParent', function() {
return {
controller:'ParentCtrl'
}
})
.directive('ngChild', function() {
return {
controller:'ChildCtrl',
scope:{},
link:function(scope,element,attrs){
}
}
})
И HTML:
<body ng-app="myApp" ng-parent>
<button ng-click="helloworld()">Parent Scope click </button>
<div ng-child>
<button ng-click="helloworld()">Child Scope click </button>
</div>
</body>
Прямо сейчас, обе кнопки будет регистрировать "привет мир от контроллера ParentCtrl". Однако, если я изменяю область параметров: {} в область: true в директиве ngChild, она работает, и кнопки вызывают функцию helloworld соответствующих областей. Но это не делает чистой области, как я хочу.
Как сделать чистую область действия в директиве с угловым 1,2, не назначая контроллер на мой взгляд?
Спасибо, Andreas
Вы можете добавить контроллеры в свои директивы. Я счел это полезным при организации большей части кода, отличного от UI, назначенного контроллеру, в то время как мой DOM-манипуляционный код находится в обратном вызове link(). В этом случае моя бизнес-логика не может существовать без остальной части пользовательского интерфейса директивы. Это делает намного более чистый код IMHO. – mitch
Как правило, это плохая идея объединить ui и бизнес-логику, но поскольку я не знаю вашего точного сценария, это может быть действительно. –
Спасибо за ваш ответ. Я понимаю, что helloworld перезаписывается, потому что новая область не создается ... Вот почему я использовал код в качестве примера. Я не согласен с тем, что вы должны использовать ng-controller в своем представлении вместо назначения его в директиве. В рамках MVC вы должны иметь возможность создавать html-шаблон с контроллером и моделью, отделенной от HTML. Например. создание ng-my-element> должно быть возможным, с возможностью изменения контроллера и опций из директивы вместо изменения каждого экземпляра html этого ... –
asprotte