AngularJS newb在这里,提出了很多问题 .
- 我可以问一个指令写入控制器内部的函数之间的区别是什么?
例如,在此指令代码段中:
link: function(scope, element, attrs) {
scope.hideModal = function () {
console.log("hide modal fxn called");
scope.show = false;
};
},
template:'<div class=\"ng-modal\" ng-show=\"$scope.show\">' +
'<div class=\"ngdialog-overlay\" ng-click=\"hideModal()\"></div>' +
'<div class=\"ng-modal-dialog\" ng-style=\"dialogStyle\">' +
'<div class=\"ng-modal-close\" ng-click=\"hideModal()\">X</div>' +
'<div class=\"ng-modal-dialog-content\" ng-transclude></div>' +
'<div style=\"left:80%\"><button type = \"button\" style=\"float:right\">Next</button></div>' +
'</div>' +
'</div>'
-
为什么hideModal()函数写在链接内(不确定这是什么)而不是在控制器内?
-
是否可以在控制器中编写hideModal()?
-
如果#3的答案是肯定的,我可以省略完全写入链接吗?如果我这样做会有任何不利之处吗?
我问这些因为无论我把它放在哪里(无论是指令还是控制器),我都无法使hideModal()函数工作,我想了解原因 .
如果你能尽可能地以外行的方式回答我,我会非常感激 . AngularJS对我来说是一件很难理解的事情,我对它并不是很精通,所以如果你不这样做的话,你有100%的机会从我那里得到空白的目光 .
谢谢 .
1 回答
如果将它添加到
$scope
,确实没有区别 .link
函数中的scope
与控制器中的$inject
完全相同 .不确定为什么它在
link
函数中 . 如果我需要DOM操作,我只使用link
,即通过jQuery是的,这完全没问题,因为它被添加到了相同的
$scope
.没有缺点,你可以肯定完全省略
link
功能 .一般规则是,你需要
DOM
操纵吗?使用link
功能,否则只需坚持使用controller
.不同之处在于执行时间,在编译之前执行
controller
函数,而在模板编译之后执行link
.这就是为什么你会使用链接函数进行
DOM
操作 . 在controller
阶段,模板尚未编译,因此您无法在函数的构造函数中使用DOM
操作 .如果您根本不需要
DOM
操作,那么查看新的.component
语法可能会更好 . 与.directive
语法相比,这更容易理解 . 请记住.component
语法只是.directive
的有限抽象Link to the component docs