AngularJS - 一个文件中的控制器和服务
AngularJS - Controller and Service in one File
为什么这个简单的代码不起作用:
angular.module('menuApp', [])
.factory('menuService', function($http){
var Menus = {};
Menus.get = function() {
return $http.get('/api/foods');
};
return Menus;
})
.controller('menuCtrl', function($http, Menus){
var vm = this;
vm.headline = "Menu Card";
Menus.get()
.success(function(data) {
vm.menus = data;
});
});
.HTML:
<div ng-controller="menuCtrl as menu">
<h1>{{menu.headline}}</h1>
<p>Search by catergory:</p>
<input type="text" ng-model="search.category">
<div class="ui divider"></div>
<div class="ui grid">
<div class="four wide column" ng-repeat="menu in menu.menus | filter: search">
<div class="ui segment">
<h3>{{menu.category}}</h3>
<h2>{{menu.name}}</h2>
<p>{{menu.desc}}</p>
</div>
</div>
</div>
</div>
这是控制台错误:
错误: [$injector:unpr] http://errors.angularjs.org/1.3.14/$injector/unpr?p0=MenusProvider%20%3C-%20Menus%20%3C-%20menuCtrl 错误(本机) 在 https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js:6:417 在 https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js:38:7 at Object.d [as get] (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js:36:13) 在 https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js:38:81 在 D (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js:36:13) at Object.e [as invoke] (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js:36:283) at $get.w.instance (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js:75:451) 在 https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js:58:476 在 S (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js:7:408)
Angular 将通过匹配工厂注册的名称来查找您的服务,因此控制器的参数必须具有名称 menuService
。
此外,我建议您使用数组表示法,以防您计划最小化代码。
您的控制器线应如下所示:
.controller('menuCtrl', ['$http', 'menuService', function($http, menuService){
...
}]);
- 尝试将服务链接到控制器时出现角度问题
- 使用服务(AngularJS)在控制器之间共享数据
- 从AngularJS中的另一个文件中的控制器访问服务
- AngularJS 1.5.x服务未正确绑定,并且未在控制器中更新
- Ionic将firebase注入工厂,同时将控制器和服务保存在不同的文件中
- 通过共享服务在两个不同ng应用程序中的控制器之间共享数据
- Http服务工厂将未定义的返回到Angular中的控制器
- 由控制器调用的服务更改时,Angular未更新视图
- 将Browserify与Angular JS结合使用--将服务传递到控制器中
- 将工厂服务数据发送到控制器,以便在视图中使用
- 角度控制器服务承诺不起作用
- 跨控制器服务的角度json数据
- 使用DOM中的信息创建一个控制器/服务来持久化数据
- 推迟在应用程序运行angularjs上创建控制器/服务
- 将主机配置传递给控制器/服务
- 控制器/服务的最佳实践
- 控制器+服务结构不能正确触发离子切换ng-change
- 未捕获的TypeError: undefined不是函数'当把控制器/服务放在单独的js文件中时
- 一个AngularJS文件中有多少控制器(服务、工厂、指令)
- 我应该保护我的 Angular 控制器/服务免受全局命名空间的影响吗?