0

I am a javascript noob so i dont understand why in the code below the author uses Avengers.cast instead of just Avengers?

var myApp = angular.module('myApp', []);
    myApp.factory('Avengers', function() {
        var Avengers = {};
        Avengers.cast = [{
            name: "Robert Downey Jr.",
            character: "Tony Stark / Iron Man"
        }];
        return Avengers;
    })


function AvengersCtrl($scope, Avengers) {
    $scope.avengers = Avengers;
}
4

3 回答 3

1
    var Avengers = {};

这意味着:创建一个新对象并通过变量 Avengers 引用它

    Avengers.cast = [{
        name: "Robert Downey Jr.",
        character: "Tony Stark / Iron Man"
    }];

这意味着:刚刚创建的对象现在有一个名为 的属性cast。这是一个数组,并且只包含一个对象(具有两个具有字符串值的属性)。

于 2014-02-25T11:59:47.100 回答
0

回答您的具体问题:传递信息的方法不止一种。

作者本可以使Avengers服务只是数组而不是带有数组的对象。

所以这个选择有点武断,正如你似乎正在接受的那样。

也就是说,如果作者计划Avengers使用更多属性扩展服务,那么这就是选择具有数组的对象的原因。

虽然如果你只是要这样做,你应该检查一下constant- 也许它会比factory.

于 2014-02-25T12:06:34.400 回答
0

在您的代码中,cast属性 ofAvengers设置为特定对象。比方说,最初Avengers没有价值。在工厂区,Avengers成为

Avengers.cast = [{
    name: "Robert Downey Jr.",
    character: "Tony Stark / Iron Man"
}];

您可以在代码中的某处使用它,例如console.log(Avengers.cast). 以下示例为函数;

myApp.factory('Avengers', function() {
    return {
        helloWorld: function() {
            return "Hello, World!"
        }
    };
});

您可以Avengers.helloWorld()在代码中的某处使用。

总而言之,您可以使用 angular.js 工厂创建对象并为该对象设置属性,还可以在该对象中创建函数。请参阅此处 了解更多详情

于 2014-02-25T12:02:10.163 回答