扬帆大鱼
A directive允许您以声明方式扩展HTML词汇表以构建Web组件。该ng-app属性是一个指令,所以是ng-controller所有的ng- prefixed attributes。指令可以是attributes,tags甚至class names是comments。指令如何诞生(compilation和instantiation)编译:我们将在呈现之前将该compile函数用于manipulateDOM并返回一个link函数(将为我们处理链接)。这也是放置任何需要与所有instancesthis指令共享的方法的地方。link:我们将使用该link函数注册特定DOM元素上的所有侦听器(从模板克隆)并设置我们对页面的绑定。如果设置在compile()函数中,它们只会被设置一次(这通常是你想要的)。如果在link()函数中设置,则每次将HTML元素绑定到对象中的数据时都会设置它们。<div ng-repeat="i in [0,1,2]">
<simple>
<div>Inner content</div>
</simple></div>app.directive("simple", function(){
return {
restrict: "EA",
transclude:true,
template:"<div>{{label}}<div ng-transclude></div></div>",
compile: function(element, attributes){
return {
pre: function(scope, element, attributes, controller, transcludeFn){
},
post: function(scope, element, attributes, controller, transcludeFn){
}
}
},
controller: function($scope){
}
};
});Compile函数返回pre和post链接函数。在预链接函数中,我们有实例模板以及范围controller,但是模板没有绑定到范围,仍然没有被转换的内容。Postlink function是post link是最后一个执行的函数。现在transclusion已经完成了the template is linked to a scope,和view will update with data bound values after the next digest cycle。该link选项只是设置post-link功能的快捷方式。controller:指令控制器可以传递给另一个指令链接/编译阶段。它可以作为在指令间通信中使用的手段注入其他指南。您必须指定所需指令的名称 - 它应绑定到同一元素或其父元素。该名称可以带有以下前缀:? – Will not raise any error if a mentioned directive does not exist.^ – Will look for the directive on parent elements, if not available on the same element.使用方括号[‘directive1′, ‘directive2′, ‘directive3′]需要多个指令控制器。var app = angular.module('app', []);app.controller('MainCtrl', function($scope, $element) {});app.directive('parentDirective', function() {
return {
restrict: 'E',
template: '<child-directive></child-directive>',
controller: function($scope, $element){
this.variable = "Hi Vinothbabu"
}
}});app.directive('childDirective', function() {
return {
restrict: 'E',
template: '<h1>I am child</h1>',
replace: true,
require: '^parentDirective',
link: function($scope, $element, attr, parentDirectCtrl){
//you now have access to parentDirectCtrl.variable
}
}});