Angularjs提供程序:如何从控制器传递选项或配置提供程序?

时间:2013-12-30 06:33:40

标签: javascript jquery angularjs

如何从控制器传递选项<或> >?

这是我在提供者js文件中传递options / config的提供者示例,

provider.js,

app.provider('contactProvider', function() {
        this.name = 'Default';
        this.$get = ['$rootScope','$route','$http', function($rootScope,$route,$http) {

            var name = this.name;
            return {
                sayHello: function() {
                    return "Hello, " + name + "! From Provider!!"
                }
            }
          }];

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

    app.config(function(contactProviderProvider){
        contactProviderProvider.setName('World');
    });

controller.js,

app.controller("ListContacts", function($scope,contactProvider){

        console.log(contactProvider.sayHello());

    });

结果,

Hello, World! From Provider!!

以下是我在控制器js文件中传递options / config 的提供程序示例

provider.js,

app.provider('contactProvider', function() {
        this.name = 'Default';
        this.$get = ['$rootScope','$route','$http', function($rootScope,$route,$http) {

            var name = this.name;
            return {
                sayHello: function() {
                    return "Hello, " + name + "! From Provider!!"
                }
            }
          }];

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

controller.js,

app.config(function(contactProviderProvider){
            contactProviderProvider.setName('World');
        });

app.controller("ListContacts", function($scope,contactProvider){

        console.log(contactProvider.sayHello());

    });

结果,

Error: [$injector:modulerr] Failed to instantiate module MyApp due to: [$injector:unpr] Unknown provider: contactProviderProvider http://errors.angularjs.org/1.2.6/$injector/unpr?p0=contactProviderProvider minErr/<@http://localhost/test/2013/php-angular/2013/12/1-requirejs/js/lib/angular/angular.js:78

但有时我得到的结果是正确的(怎么回事!??),

Hello, World! From Provider!!

如何从提供者js文件正确之外传递选项呢?

2 个答案:

答案 0 :(得分:1)

您会看到错误,因为您的controller.js文件已在provider.js之前加载; 当provider.js被缓存时,您将获得真实的结果。 您可以使用require.js来解决此问题。

答案 1 :(得分:0)

似乎错误是由requirejs引起的,似乎是由此修复的,

define([
    'jquery',
    'app',
    'factory/factoryContacts'
], function ($,app) {

  app.config(function (contactProvider) {
    contactProvider.setName('World 8');
  });

    app.controller("ListContacts", function($scope,contact){
        //contact.setName('World 8');
        console.log(contact.sayHello());

    });
....

这很奇怪,什么是黑客!