指令的控制器和(link)链接函数

angular.module('myApp')
.directive('link', function() {
return {
restrict: 'EA',
transclude: true,
controller:
function($scope, $element, $transclude, $log) {
$transclude(function(clone) {
var a = angular.element('<a>');
a.attr('href', clone.text());
a.text(clone.text());
$log.info("Created new a tag in link directive");
$element.append(a);
});
}
};
});
指令的控制器和link函数可以进行互换。控制器主要是用来提供可在指令间复用的行为,但
链接函数只能在当前内部指令中定义行为,且无法在指令间复用。


link函数可以将指令互相隔离开来,而controller则定义可复用的行为。
由于指令可以require其他指令所使用的控制器,因此控制器常被用来放置在多个指令间共
享的动作。
如果我们希望将当前指令的API暴露给其他指令使用,可以使用controller参数,否则可以
使用link来构造当前指令元素的功能性。如果我们使用了scope.$watch()或者想要与DOM元素
做实时的交互,使用链接会是更好的选择。
技术上讲, $scope会在DOM元素被实际渲染之前传入到控制器中。在某些情况下,例如使
用了嵌入,控制器中的作用域所反映的作用域可能与我们所期望的不一样,这种情况下, $scope
对象无法保证可以被正常更新。
当想要同当前屏幕上的作用域交互时,可以使用被传入到link函数中的scope
参数。 

 

猜你喜欢

转载自ruanqiangbeyond201208043532.iteye.com/blog/2355328