Javascript Angularjs提供程序:如何向控制器传递选项或从控制器配置提供程序?
如何向控制器传递选项或从控制器配置提供程序 下面是一个提供程序示例,我在提供程序js文件中传递options/config provider.jsJavascript 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) {
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
来处理此问题