如何从控制器传递选项<或> >>?
这是我在提供者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文件正确之外传递选项呢?
答案 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());
});
....
这很奇怪,什么是黑客!