为什么angular要使用闭包来定义指令和其他核心语法?
Why does angular use closures to define directives and other core syntax?
这样写的好处是什么?
app.directive("drink", function () {
return {
scope: {
flavor: "="
},
template: '<div>{{ flavor }}</div>'
};
});
而不是:
app.directive("drink", {
scope: {
flavor: "="
},
template: '<div>{{ flavor }}</div>'
}};
这种语法在angular中随处可见。原因是什么?
编辑:来自https://thinkster.io/egghead/isolate-scope-eq
对于第一个示例,angular可以控制何时创建配置对象,因此可以选择合适的时间。它还允许以以下形式进行依赖注入:
app.directive("drink", ['drinkStoreService', function (drinkStoreService) {
return {
scope: {
flavor: "="
},
template: '<div>{{ flavor }}</div>',
link: function () {
// could use `drinkStoreService` here
}
};
}]);
而第二个示例没有上述任何特性。因此它的可用性大大降低。而且,因为对象文字将是"当场创建/执行",它甚至可能对程序流有害。
还请注意,通过返回一个函数,您还可以执行以下操作:
return function()
{
var privateVar = mysteriousDataSource(); //Without having this executed instantly
return {
scope: {
flavor: "=",
mysteriousData : privateVar
},
template: '<div>{{ flavor }}</div>'
};
}
相关文章:
- 在其他javascript框架模板中运行angular指令
- 如何使用其他自定义指令中的元素标记作为另一个自定义指令的模板
- 编写angularjs指令来包装其他指令
- AngularJS,引用指令中的其他DOM项
- 如果在具有单独作用域的其他指令中,请使用ng
- 如何从指令中的其他模块调用方法
- 触发特定路由的其他指令,如ng-init或事件,如stateChangeStart
- JavaScript 变量在没有指令的情况下写入其他变量
- 如何修复角度指令顺序(Firefox 和其他浏览器的区别)
- 如何将 angularJS 指令/组件作为属性传递给其他指令/组件
- 我可以在其他指令中使用任意AngularJS指令吗
- 如何在AngularJS中将指令模板的属性附加到父元素之外的其他元素
- 当指令的其他实例中的模型发生更改时,检查函数
- 如何使其他指令在uib选项卡元素中工作
- 使用其他指令的指令-AngularJS
- AngularJS指令-来自$scope的模板和其他指令
- 我希望我的控制器在做其他事情之前等待我的指令完成
- 为什么angular要使用闭包来定义指令和其他核心语法?
- 如何在指令之前执行ng-if,或者使用其他东西而不是ng-if
- Angular.js——有没有办法摆脱ng-click和其他类似内联JavaScript的指令?