2

从互联网上的不同资源中学习角度确实令人困惑。每个人都使用不同类型的模式来编写函数。请对这个 .provider概念有所了解

我尝试.provider了 4 种不同的模式,并且都在工作

模式A:使用里面的所有功能return

app.provider('other', function() {
    name ="Default";
    return {
        $get: function () {
                return {
                    sayHello: function () { console.log('provider example say my name is :' + name )}
                }
        },
        setName: function (newName) {
            name = newName;
        }
    };
}); 

模式 B:使用this和区分 $get 和其他方法

app.provider('other', function() {
    this.name ="Default";
    this.$get = function () {
        var name = this.name;
        return {
            sayHello: function () { console.log('provider example say my name is :' + name )}
        };
    };

    this.setName = function(name) {
        this.name = name;
    };
});

模式 C :[ ]也可以在返回的函数之前使用数组找到某个地方

this.$get = [function () {
        var name = this.name;
        return {
            sayHello: function () { console.log('provider example say my name is :' + name )}
        }
    }];

更新

模式 D:使用 .factory,然后使用functionNameProvider.$get.methodName()和 .config

app.factory('alpha', function(){
        var c = ['Cadbury','Perk','Dairy Milk'];
        return {
            sayHello: function() { console.log('Hello, I am from Provider');},
            getAllData: function() { return c; }
        };
});

然后

app.config(['alphaProvider',function(alphaProvider) {
 console.group('Checking Factory Pattern');
 alphaProvider.$get().sayHello();
 var cdata = alphaProvider.$get().getAllData();
 console.log(cdata);
 console.groupEnd();
}]);

为此创建了一个jsfiddle,请告诉我哪种方法是正确/首选的?

4

1 回答 1

3

模式 A 和 B 都是创建提供者/服务的正确方法。

function您传递给该方法provider()的是提供者实例的构造函数。Provider 实例只是一个带有$get方法的对象。关于如何实例化它,您有两种选择:

  • 从构造函数显式返回提供程序实例(模式 A
  • 使用this语法并且从构造函数(模式 B)不返回任何内容。在这种情况下,Angular 将创建一个提供程序实例作为新实例Object并针对它运行您的构造函数(this绑定到它)。

模式 C是内联数组注释- 一种指定组件/函数依赖关系的方法。该数组应包含依赖项的名称,后跟function您希望它们注入的位置。可与 A 和 B 方法一起使用。

更新

正如@estus所指出的,B 方法更有效,因为在 A 的情况下,Object也会创建新的但从未使用过。

于 2016-06-15T12:58:27.833 回答