angularjs – 控制器内部指令的行为
我知道控制器的$范围可以被分配给指令中的链接函数。
例如,在这段代码中,我可以从声明的控制器调用一个函数,在浏览器控制台上打印“Hello World” .directive('myDirective',[function () { return { restrict : 'E',replace : true,controller: 'MyController',templateUrl : 'directives/myDirective.tpl.html',link : function (scope,elem,attrs,controller) { scope.message = 'Hello World!'; } }; }]) .controller('MyController',[function ($scope,$element,$attrs,$log,$timeout) { // $timeout to wait the link function to be ready. $timeout(function () { // This prints Hello World as expected. $log.debug($scope.message); }); }); }]) 好的,这很好。 我的问题是: >在这种方法中,控制器和指令之间将共享相同的范围? 这些是我在Angular Directive documentation没找到的问题。 Here’s a plunker with the sample code。
是的。
控制器是提供指令的行为,就像常规Angular应用程序一样。也就是说,您应该仅操纵控制器功能中的范围。如果您需要从链接功能更改范围,请调用它的方法。此外,由于控制器在链接功能之前执行,所以您应该在前者中初始化范围,以便后者可以获得有效的模型。
根据定义,链接函数是执行DOM操作的地方。我找不到阻止你操纵指令控制器内的DOM的技术原因,除了你不应该。事实上,为了检查我刚刚修改了一个我已经编写的指令,并将链接功能中的所有代码移动到控制器功能,并且一切都保持工作。但是,如果将范围逻辑和DOM操作混合在一起,我认为很难跟踪发生了什么。 最后,你可能会发现这篇文章很有用:Understanding Directives。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |