2013-05-04 54 views
4

我期待通过angularjs例子模块,我发现这个例子:如何通过参数angularjs

// This is a module for cloud persistance in mongolab - https://mongolab.com 
angular.module('mongolab', ['ngResource']). 
factory('Project', function($resource) { 
    var Project = $resource('https://api.mongolab.com/api/1/databases' + 
     '/angularjs/collections/projects/:id', 
     { apiKey: '4f847ad3e4b08a2eed5f3b54' }, { 
     update: { method: 'PUT' } 
     } 
); 

    Project.prototype.update = function(cb) { 
    return Project.update({id: this._id.$oid}, 
     angular.extend({}, this, {_id:undefined}), cb); 
    }; 

    Project.prototype.destroy = function(cb) { 
    return Project.remove({id: this._id.$oid}, cb); 
    }; 

    return Project; 
}); 

我不想用魔法串静态资源,如https://api.mongolab.com/api/1/databases/angularjs/collections/projects/:id,而是我会喜欢让它在服务器上定义并在稍后传递到模块中。我的问题是,你如何参数化模块,即如何从外部将JavaScript变量传递到模块中?

+0

配置它也许这一个能鼓舞你做 http://stackoverflow.com/questions/16339595/angular-js-configuration- for-different-enviroments/16340438#16340438 – kfis 2013-05-04 20:54:40

+0

我会尝试在View文件中定义我的配置模块,谢谢 – Lu4 2013-05-04 21:14:09

+0

我不知道我是否正确理解你在找什么,但我认为你需要使用提供者而不是工厂HTTPS://docs.angularjs .ORG /导向/提供者#提供商食谱 – TlmaK0 2015-06-11 14:47:17

回答

0

只有当您想公开一个必须在应用程序启动之前必须完成的应用程序范围配置的API时,您应该使用Provider配方。这通常仅适用于可重用服务,其行为可能需要在应用程序之间略有不同。

var app = angular.module('mongolab', ['ngResource']) 
app.provider('project', function projectProvider(){ 
    var resourceUrl = false; 

    this.resourceUrl = function(url){ 
     this.resourceUrl = url; 
    } 

    this.$get = [function project(){ 
     return new Project(resourceUrl); 
    }]; 
}); 

function Project(resourceUrl) { 
    var Project = $resource(resourceUrl, 
     { apiKey: '4f847ad3e4b08a2eed5f3b54' }, { 
     update: { method: 'PUT' } 
     } 
); 

    Project.prototype.update = function(cb) { 
    return Project.update({id: this._id.$oid}, 
     angular.extend({}, this, {_id:undefined}), cb); 
    }; 

    Project.prototype.destroy = function(cb) { 
    return Project.remove({id: this._id.$oid}, cb); 
    }; 

    return Project; 
}); 

然后你就可以用

app.config(["projectProvider", function(projectProvider){ 
    projectProvider.resourceUrl('https://api.mongolab.com/api/1/databases' + 
     '/angularjs/collections/projects/:id') 
}]);