angularjs - 尝试定义和配置我的自定义提供程序时出现问题

标签 angularjs angularjs-service

我非常确定我遵守了所有规则:

  • $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/

相关文章:

angularjs - 为什么 AngularJS 中模型改变时不调用 ngModel 的 $render ?

angularjs - 可以是元素、属性、css 类和注释的指令?

angularjs - 在服务中返回已解析的 $resource

angularjs - 如何使用 `$destroy` 指令并替换为新值

javascript - Angular contenteditable 更改事件未触发

angularjs - 错误 : [$injector:unpr] Unknown provider - while migrating AngularJS1 to Angular6

javascript - AngularJS $resource only 不会返回数据

javascript - 如何将共享服务与不使用共享服务的 Controller 一起使用?

javascript - 如何绑定(bind)到 AngularJS 中函数的结果

javascript - Angular js promise 链接