【问题标题】:Why use AngularJs .constant() if I can declare JS const?如果我可以声明 JS const,为什么要使用 AngularJs .constant()?
【发布时间】:2017-03-25 22:13:50
【问题描述】:

我正在开发一个 AngularJS 项目,其中有一个 .constant() 提供程序来声明在整个项目中使用的一些基本信息。例如,cookie 名称的定义。例如:

.constant('appConst', { 
    cookie: 'CookieName',
    ...
});

但同样的事情可以通过声明const 来完成,例如:

const appConst = {
    cookie: 'CookieName',
    ...
}

那么,使用.constant 提供程序而不是仅仅声明const 有什么好处?我知道其中一个原因是因为我们不期望值会改变。但这不是 const 的相同目标吗?

【问题讨论】:

标签: javascript angularjs constants


【解决方案1】:

新的const 关键字只会使您无法重新分配变量,它不会使您最初分配给它的任何对象不可变。所以在你的例子中:

const appConst = {
    cookie: 'CookieName',
    ...
}

您仍然可以更改cookie 的值。就是不允许你做这样的事情:

appConst = { // My new object };

角度.constant() 中的值仍然可以更改,因此在“常量”一词的常用用法中它们不是常量。至少当你像这样使用它时不会:

.constant('appConst', { 
    cookie: 'CookieName',
    ...
});

因此,例如,如果您这样做并更改控制器中的值

app.controller('myController', function(appConst){
    appConst.cookie = 'NewCookieName';
})

在构造此控制器后,更改将反映在您注入 appConst 的任何位置。

但是,在这种情况下,您不能“重新分配”appConst,该操作将被忽略,因此在这个意义上它是恒定的。

【讨论】:

    【解决方案2】:

    1- const 是 ES6 中的新功能,因此您可能需要转译代码以支持旧浏览器。

    2- const 是块范围的,所以在一个场景中,你在 A.js 中定义一个常量,除非你使用模块捆绑器,否则将无法在 B.js 使用它,所以我们去了回到主题1-

    AngularJS 拥有这个原生的主要目的是让你能够使用它的依赖注入系统在控制器、服务和指令之间共享它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-08
      • 1970-01-01
      • 2012-04-25
      • 1970-01-01
      • 2010-10-01
      • 2019-10-04
      • 1970-01-01
      • 2015-04-11
      相关资源
      最近更新 更多