2

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

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

这是一个小提琴

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

1 回答 1

2

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

小提琴: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未注入控制器
  • getData服务的功能中,mocksEnabled需要是this.mocksEnabled
于 2013-05-30T17:13:46.680 回答