为什么angular要使用闭包来定义指令和其他核心语法?

Why does angular use closures to define directives and other core syntax?

本文关键字:指令 其他 核心 语法 定义 angular 闭包 为什么      更新时间:2023-09-26

这样写的好处是什么?

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>'
      };
    }