如何使AngularJS指令明确定义其依赖关系而不隔离范围

时间:2015-01-26 10:26:21

标签: javascript angularjs angularjs-directive angularjs-scope directive

我正在编写应用程序的指令,以便使用隔离范围来明确定义其在父作用域中的依赖关系。所以我总能在我的HTML组件

中实现这一点
<my-directive dependency-one="x" dependency-two="y"></my-directive>

这是我的指令的代码

angular.module("myapp").directive('myDirective', [function() {
    return {
        restrict: 'E',
            scope: {
                dependencyOne: '=',
                dependencyTwo: '='
            },
            templateUrl: "path/to/myDirective.html",
            link: function($scope){
                //here goes the code for linking function
            }
    }
}]);

但是,我已经阅读了AngularJS社区中的一些最佳实践,声明我们应该尽可能避免使用隔离范围,因为它会增加应用程序的观察者和无用的绑定。只有在编写在应用程序上重用的组件时才使用隔离范围。

据我所知,我们有两种可能性:

  • 我们的指令不会创建子范围
  • 我们的指令创建了一个子范围,它是原型继承父范围

我们可以通过这种方式阻止创建新的范围和不必要的绑定,但它会降低指令的HTML标记的可读性和清晰度,现在我们只有类似的东西:

<my-directive></my-directive>

看看这段代码,我不知道该指令需要执行什么,这违反了AngularJS引入的“声明性html”的优势。

有人对这个问题感兴趣吗?

1 个答案:

答案 0 :(得分:1)

如果没有隔离范围,那么拥有一个明确的指令API将非常困难。 因此,我并不完全同意“我已经阅读了AngularJS社区中的一些最佳实践,我们应该尽可能避免使用隔离范围,因为它会增加应用程序的观察者和无用的绑定

如果您想要明确的依赖关系,您必须选择孤立的范围。 有办法减少手表和绑定的数量。 在这种情况下,以下网址上的内容可能会有所帮助。 @ http://csharperimage.jeremylikness.com/2014/11/the-top-5-mistakes-angularjs-developers.html