如何在angular.js中分别编写控制器、服务、路由和模块
How to write seperatly the controller, services, routes and module in angular.js?
我刚刚尝试使用lumx angular material,它的app.js将所有控制器、服务和模块都放在一个地方。
我试图将它们分开,但在lumx中不起作用,因为在index.html文件中的lumx中,它们包含了app.js文件,但如果我必须编写许多控制器,我必须如何遵循它?
这是lumx 中app.js的github链接
https://github.com/lumapps/lumX/blob/master/demo/app.js
我已经制作了单独的文件作为
module.js
var app = angular.module('AppTool', [
'ngRoute',
'lumx',
'hljs',
'Services'
])
控制器/mainCtrl.js
/* global angular */
/* global escape */
/* global console */
'use strict'; // jshint ignore:line
angular.module('AppTool')
.controller('KMController', [ '$scope', KMController]);
function($scope)
{
$scope.check = "The Check";
}
services/mainService.js
angular
.module('AppTool', [])
.service('Sidebar', function()
{
var sidebarIsShown = false;
function toggleSidebar()
{
sidebarIsShown = !sidebarIsShown;
}
return {
isSidebarShown: function()
{
return sidebarIsShown;
},
toggleSidebar: toggleSidebar
};
});
路由.js
'use strict';
/**
* Route configuration
*/
angular.module('AppTool')
.config(['$stateProvider', '$urlRouterProvider', '$locationProvider'
function($stateProvider, $urlRouterProvider, $$locationProvider) {
// $locationProvider.html5Mode({
// enabled: true,
// requireBase: false
// });
// For unmatched routes
$urlRouterProvider.otherwise('/');
// Application routes
$stateProvider
.state('index', {
url: '/',
templateUrl: '/',
})
}
]);
index.html
<!DOCTYPE html>
<html ng-app="AppTool" ng-controller="KMController">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>LumX</title>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<link rel="stylesheet" href="/lumx.css">
<link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:300,400,500,700">
<link rel="shortcut icon" type="image/png" href="/favicon.png">
</head>
<body>
<h1>{{check}}</h1>
<ng-include src="'/includes/common/header.html'"></ng-include>
<div class="main" ng-view></div>
</body>
</html>
您需要为每个类别(服务、控制器…)声明不同的模块,并将其注入主模块。
angular.module('apptool.service', []);
angular.module('apptool.controller', []);
angular.module('apptool', ['apptool.service', 'apptool.controller'];
现在您可以将服务创建为:
angular
.module('apptool.service') // without the [] because the module is already declarated
.service('Sidebar', function()
{
var sidebarIsShown = false;
function toggleSidebar()
{
sidebarIsShown = !sidebarIsShown;
}
return {
isSidebarShown: function()
{
return sidebarIsShown;
},
toggleSidebar: toggleSidebar
};
});
控制器:
/* global angular */
/* global escape */
/* global console */
'use strict'; // jshint ignore:line
angular.module('apptool.controller')
.controller('KMController', [ '$scope', KMController]);
function($scope)
{
$scope.check = "The Check";
}
将所有内容保存在单独的文件中,并将其包含在index.html 中
//编辑:看来我理解错了你的问题。你的意思是你只想让控制器和服务的单独文件在同一个模块中运行?然后只需首先包含模块声明js文件,然后再包含包含服务和控制器的所有其他文件。
相关文章:
- 尝试将服务链接到控制器时出现角度问题
- 使用服务(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 控制器/服务免受全局命名空间的影响吗?