我非常确定我遵守了所有规则:
- $get() 已定义。
- 正确注入(inject) Controller
- 在实例化之前在初始应用程序定义中进行配置
这是一个fiddle
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();
});
最佳答案
提供程序的 $http
和 $q
注入(inject)应该在提供程序的 $get
方法上,而不是在提供者。
fiddle :http://jsfiddle.net/pvtpenguin/UAP29/1/
.provider('MockService',function () {
this.mocksEnabled = false;
this.enableMocks = function(val) {
mocksEnabled = val;
};
this.$get = ['$http', '$q', function($http, $q) {
var _mock_getNext = function() {
return {
'status' : {
'type': 'OK',
'msg': null
},
'data': {
'id': 123456789
}
};
};
return {
getData : function() {
if(this.mocksEnabled) {
return _mock_getNext;
} else {
return "Real Data";
}
}
};
}];
})
其他小问题:
$scope
未注入(inject) Controller- 服务的
getData
函数中,mocksEnabled
需要为this.mocksEnabled
关于angularjs - 尝试定义和配置我的自定义提供程序时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16841743/