csvan
csvan

Reputation: 9474

AngularJS: Constants vs Values

As far as I understand the documentation, the only concrete difference between a Constant and a Value is that a Constant can be used during the apps config phase, whereas a Value is only available during the run phase.

I am curious as to why Values are needed at all in this case? Aren't they really just limited Constants?

Upvotes: 54

Views: 26982

Answers (3)

Kiss Koppány
Kiss Koppány

Reputation: 950

True, however, keep in mind if you use an object as a constant, its value can be overridden anytime, anywhere. For example

const version = '10.0'

can not be changed, if you take a look at the console it even throws an error when changing its value, but

const config = {
    'version': '8.6'
}

behaves like a simple value, you can change the the object values anytime, like this:

config.version = 5

tada, now your version is 5. Same applies for app.const('constant', 'its me')

Upvotes: 0

Bhupendra Gupta
Bhupendra Gupta

Reputation: 101

The difference between value and constant is that a value specified using constant is available during the configuration phase.

Well it’s the same for value and constant. constant is available from the configuration phase and value is not.

The other difference is as the name implies you can’t change the value of a constant. The first value you assign it is the value it keeps, if you try to assign it a different value later it will be ignored.

Here’s an example:

mod.value("myValue", "First Assignment");

mod.value("myValue", "Second  Assignment");

mod.constant("myConstant", "First Assignment");

mod.constant("myConstant", "Second Assignment");

mod.controller("MyController", function(myValue, myConstant) {

    console.log("myValue: " + myValue);

    console.log("myConstant: " + myConstant);
});

Console output:

myValue: Second Assignment

myConstant: First Assignment

Upvotes: 7

Artem Petrosian
Artem Petrosian

Reputation: 2954

A constant can be injected anywhere.

A constant can not be intercepted by a decorator, that means that the value of a constant should never be changed.

var app = angular.module('app', []);

app.constant('PI', 3.14159265359);

app.config(function(PI){
    var radius = 4;
    //PI can be injected here in the config block
    var perimeter = 2 * PI * radius;
});

app.controller('appCtrl', function(PI) {
    var radius = 4;
    // calculate area of the circle
    var area = PI * radius * radius; 
});

Value differs from constant in that value can not be injected into configurations, but it can be intercepted by decorators.

var app = angular.module('app', []);

app.value('greeting', 'Hello');

app.config(function ($provide) {
    $provide.decorator('greeting', function ($delegate) {
        return $delegate + ' World!';
    });
});

Upvotes: 81

Related Questions