AngularJS中的控制器/指令继承
Controller/Directive inheritance in AngularJS
我很难理解如何从指令继承父控制器。我设置了一个非常简单的例子,包括一个名为MainCrtl
的控制器。该控制器负责创建和删除一个名为inner
的指令数组。问题是,我希望能够从我的指令中访问MainCtrl
的方法,但我从浏览器控制台收到了一个错误。这是代码:
app.js
angular
.module('myApp', ['ngRoute'])
.config(function($routeProvider){
$routeProvider
.when('/', {
templateUrl: 'main.html',
controller: 'MainCtrl',
controllerAs: 'main'
});
});
脚本/控制器/main.js
angular.module('myApp')
.controller('MainCtrl', function () {
var self = this;
var index = 1;
this.inners = [];
this.init = function() {
self.addInner();
};
this.addInner = function(){
self.inners.push({
name: 'Inner ' + index
});
index++;
};
this.init();
});
views/main.html
<p>main</p>
<button type="button" ng-click="main.addInner()">Add Inner</button>
<inner ng-repeat="inner in main.inners" data="inner"></inner>
scripts/directives/inner.js
angular.module('myApp')
.directive('inner', function(){
return {
restrict: 'E',
templateUrl: 'inner.html',
require: ['^MainCtrl', 'inner'],
controllerAs: 'inner',
bindToController: true,
scope: {
data: '='
},
controller: function(){ ... },
link: function(scope, element, attrs, ctrls){ ... }
}
});
这是我从浏览器控制台得到的错误
[$compile:ctreq] Controller 'MainCtrl', required by directive 'inner', can't be found!
我在这里创建了一个plunker。请帮忙。
因此,指令不可能具有您所想的那种父控制器,指令实际上具有父指令。如果你指定的话,每个指令都可以有一个控制器
如果html中是这样的话,那么一个指令就是另一个指令的父指令。
<div parent-directive>
<div child-directive></div>
</div>
在父指令的控制器中,您需要定义要在this
上访问的任何内容。
然后require: 'parent-directive'
和link: function (scope, element, attrs, parent)
将require
设置为数组将导致数组被传递到链接函数中。可选控制器可能为空。
注意,您也可以引用同级指令。但是你不能引用你自己(也就是同样的例子)。
相关文章:
- 从控制器继承了隔离的作用域以生成可重用的指令
- 两个指令创建新的继承的和隔离的作用域-元素得到哪个
- 当使用控制器作为语法时,如何从父指令继承属性
- AngularJS - 在自定义指令中继承ngModel
- AngularJS观察指令属性表达式,动态继承作用域
- 为什么可以't我的指令从其父作用域继承函数
- Angularjs.嵌套指令中的继承作用域
- AngularJS中的控制器/指令继承
- AngularJS自定义指令在继承父作用域时访问模板中的属性
- 属性内的角度指令范围继承
- 使用 Restangular 保持 CRUD 干燥:指令、继承控制器或包装服务
- 在 AngularJS 指令中实现继承
- 角度指令的作用域继承
- $scope不会使用点表示法从控制器注入/继承到指令
- Angularjs将变量传递给具有继承(而非隔离)作用域的指令
- 角度指令控制器作用域继承
- AngularJS指令范围继承
- 通过指令表达式继承方法
- 指令/继承范围
- AngularJS指令继承