Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Angularjs提供程序:如何向控制器传递选项或从控制器配置提供程序?_Javascript_Jquery_Angularjs - Fatal编程技术网

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

Javascript Angularjs提供程序:如何向控制器传递选项或从控制器配置提供程序?,javascript,jquery,angularjs,Javascript,Jquery,Angularjs,如何向控制器传递选项或从控制器配置提供程序 下面是一个提供程序示例,我在提供程序js文件中传递options/config provider.js app.provider('contactProvider', function() { this.name = 'Default'; this.$get = ['$rootScope','$route','$http', function($rootScope,$route,$http) {

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

下面是一个提供程序示例,我在提供程序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');
    });
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.controller("ListContacts", function($scope,contactProvider){

        console.log(contactProvider.sayHello());

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

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

        console.log(contactProvider.sayHello());

    });
结果,

Hello, World! From Provider!!
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
下面是一个提供程序示例,我在控制器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');
    });
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.controller("ListContacts", function($scope,contactProvider){

        console.log(contactProvider.sayHello());

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

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

        console.log(contactProvider.sayHello());

    });
结果,

Hello, World! From Provider!!
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

我应该怎么做才能正确地从提供者js文件外部传递选项呢

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());

    });
....

这很奇怪,真是一种恶作剧

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