Angularjs 尝试定义和配置自定义提供程序时出现问题

Angularjs 尝试定义和配置自定义提供程序时出现问题,angularjs,angularjs-service,Angularjs,Angularjs Service,我很确定我遵守了所有规则: 已定义$get() 正确注入控制器 在实例化之前在初始应用程序定义中进行配置 这是一个 提供者的$http和$q注入应该在提供者的$get方法上,而不是提供者的构造函数上 小提琴: .provider('MockService',函数(){ this.mocksEnabled=false; this.enableMocks=功能(val){ mocksEnabled=val; }; 这个.get=['$http','$q',函数($http,$q){ var\u

我很确定我遵守了所有规则:

  • 已定义$get()
  • 正确注入控制器
  • 在实例化之前在初始应用程序定义中进行配置
这是一个


提供者的
$http
$q
注入应该在提供者的
$get
方法上,而不是提供者的构造函数上

小提琴:

.provider('MockService',函数(){
this.mocksEnabled=false;
this.enableMocks=功能(val){
mocksEnabled=val;
};
这个.get=['$http','$q',函数($http,$q){
var\u mock\u getNext=function(){
返回{
“状态”:{
'类型':'确定',
“msg”:null
},
“数据”:{
“id”:123456789
}
};
};
返回{
getData:function(){
如果(此为mocksEnabled){
返回\u mock\u getNext;
}否则{
返回“真实数据”;
}
}
};
}];
})
其他小问题:

  • $scope
    未注入控制器
  • 在服务的
    getData
    函数中,
    mocksEnabled
    需要是this.mocksEnabled

谢谢你,伙计!真不敢相信我花了3个小时的时间尝试所有的事情来达到目的——事后看来,这是有意义的=)但有趣的是,它只在那种情况下起作用。在本地环境中使用相同的代码,我仍然得到一个“未知提供者:MockService”。因此,显然还有另一个问题>。好的,我发现了这个问题-但我仍然感到困惑><显然,在定义提供程序之前,注入MockServiceProvider是可以的:
var-app=angular.module('ToolApp',function($httpProvider,$routeProvider,$locationProvider,RxQueueProvider){})。提供程序('MockServiceProvider',function()…
但是在我的本地开发环境中,我得到一个缺少的提供程序异常,除非在我注入它之前调用app.provider()。Whyyyy?
angular.module('app', function($httpProvider, $locationProvider, MockServiceProvider) {
    delete $httpProvider.defaults.headers.common['X-Requested-With'];
    $locationProvider.html5Mode(false);
    MockServiceProvider.enableMocks(true);
})
.provider('MockService',['$http', '$q', function ($http, $q) {
    this.mocksEnabled = false;
    this.enableMocks = function(val) {
            mocksEnabled = val;
    };
    this.$get = function() {
        var _mock_getNext = function() {
            return {
                'status' : {
                    'type': 'OK',
                    'msg': null
                },
                'data': {
                    'id': 123456789
                }
            };
        };
        return {
            getData : function() {
                if(mocksEnabled) {
                    return _mock_getNext;
                } else {
                    return "Real Data";
                }
            }
        };
    };
}])
.controller('Main', function(MockService) {
    $scope.maybe_mock_data = MockService.getData();
});