AngularJS自定义服务作为控制器依赖注入时无法正常工作
解决AngularJS自定义服务注入控制器的问题
别急,我来帮你搞定这个问题!按照GitHub风格指南的控制器写法,只要把自定义服务正确加到$inject数组里,就能顺利注入啦,我给你一步步拆解:
第一步:先确保自定义服务已经正确定义
首先你得先把自定义服务写好并注册到AngularJS应用里,比如用factory来定义一个业务服务:
// 假设你的AngularJS应用是这样定义的 var app = angular.module('myApp', []); // 定义自定义服务,比如叫UserService,这里放你的业务逻辑 app.factory('UserService', function() { return { fetchUserList: function() { // 模拟获取用户列表的业务逻辑 return [{name: '张三'}, {name: '李四'}]; } }; });
第二步:控制器里正确配置$inject和依赖
接下来写你的控制器,重点是把自定义服务的名称加到$inject数组里,并且顺序要和控制器函数的参数完全对应:
// 先定义控制器函数,参数里包含$scope和自定义服务UserService function Example1Ctrl($scope, UserService) { // 在这里使用自定义服务的方法 $scope.users = UserService.fetchUserList(); } // 关键!把需要注入的依赖都写到$inject数组里,顺序和上面的参数顺序必须一致 Example1Ctrl.$inject = ['$scope', 'UserService']; // 最后注册控制器到应用 app.controller("Example1Ctrl", Example1Ctrl);
容易踩的坑要注意
- 名称完全匹配:
$inject数组里的服务名称必须和你定义的服务名一模一样,大小写都不能错,AngularJS是严格匹配的 - 顺序绝对不能乱:
$inject里的元素顺序,必须和控制器函数的参数顺序一一对应,不然注入的依赖会错位,导致报错 - 服务要先于控制器定义:确保你的自定义服务是在控制器注册之前就已经定义好了,不然AngularJS找不到这个服务,会抛出
Unknown provider的错误
错误示例对比(别这么写!)
比如你如果漏掉了$inject里的自定义服务,或者顺序错了,都会出问题:
错误写法1:$inject里没加自定义服务
Example1Ctrl.$inject = ['$scope']; // 这里少了UserService,控制器里调用会报错
错误写法2:参数顺序和$inject不匹配
Example1Ctrl.$inject = ['UserService', '$scope']; // 但控制器函数是function Example1Ctrl($scope, UserService),这时候注入的依赖会错位,完全用不了
这样写下来,你的自定义服务就能正常作为控制器依赖运行啦,完美符合GitHub风格指南的写法~
内容的提问来源于stack exchange,提问作者rupertrealbear
相关产品推荐
相关产品推荐

