首页 文章

函数内部指令VS函数内部控制器的区别

提问于
浏览
0

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 回答

  • 2
    • 如果将它添加到 $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

相关问题