假设我有两个指令:
angular.module('example').directive('dir1', function () {
return {
restrict: 'A',
scope: true,
controller: 'ExampleCtrl'
};});
angular.module('example').directive('dir2', function () {
return {
restrict: 'A',
scope: true,
controller: 'ExampleCtrl'
};});
是否有可能告诉哪个指令在此控制器内初始化ExampleCtrl
?
答案 0 :(得分:1)
我想到了两种方式。这个解决方案我发现它不那么狡猾,但也不那么动态了:
angular.module('example').directive('dir1', function () {
return {
restrict: 'A',
scope: true,
controller: 'ExampleCtrl',
link: function(scope) {
$scope.myDir="dir1";
}
};});
angular.module('example').directive('dir2', function () {
return {
restrict: 'A',
scope: true,
controller: 'ExampleCtrl'
link: function(scope) {
$scope.myDir="dir2";
}
};});
通过这种方式,您可以将父指令烘焙到范围中,该范围可供控制器使用。
这个解决方案更加黑客,但也更具动感。使用this问题,我们可以获取包含元素:
function innerItem($scope, $element){
var jQueryInnerItem = $($element);
}
从那里,我们可以测试该元素的属性和属性,这些属性和属性特定于一个指令而不是另一个指令(例如指令名称)。我仍然认为这是非常hacky你有一个潜在的问题(这里可能有点XY问题),但这应该工作。
答案 1 :(得分:1)
你可以这样做:
angular.module('example').directive('dir1', function () {
return {
restrict: 'A',
scope: true,
controller: 'ExampleCtrl',
controllerAs: 'dir1Ctrl'
};});
angular.module('example').directive('dir2', function () {
return {
restrict: 'A',
scope: true,
controller: 'ExampleCtrl',
controllerAs: 'dir2Ctrl'
};});
然后,在控制器中$scope.dirNcontroller
,其中N
为1或2或您拥有的数量,只有来自指令N
才会存在。这就是controllerAs
语法的工作原理,它只是发布到范围。
这样的事情:
app.controller('ExampleCtrl', function($scope, $element) {
if ($scope.dir1Ctrl) /* do something */
if ($scope.dir2Ctrl) /* do something else */
});