requirejs+anjularjs+express框架
2015-12-18 11:46
471 查看
1.目录
![](http://images2015.cnblogs.com/blog/475687/201512/475687-20151224141053218-503412502.png)
2.首页login.html如下:
<!DOCTYPE html>
<html>
<head>
<title>登录界面</title>
<link rel='stylesheet' href='/stylesheets/style.css' />
<link rel="stylesheet" href="/css/bootstrap.min.css">
</head>
<body>
<div class="container" ng-controller="login-controller">
<form class="col-sm-offset-4 col-sm-4 form-horizontal" role="form" method="post" name="myForm" novalidate>
<fieldset>
<legend>用户登录</legend>
<div class="form-group">
<label class="col-sm-3 control-label" for="username">用户名</label>
<div class="col-sm-9">
<input type="text" class="form-control" id="username" name="username" ng-model="username" placeholder="用户名111" required/>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label" for="password">密码</label>
<div class="col-sm-9">
<input type="password" class="form-control" id="password" name="password" ng-model="password" placeholder="密码" required/>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-3 col-sm-9">
<button ng-disabled="myForm.$invalid" ng-click="login()" type="button" class="btn btn-primary">登录</button>
</div>
</div>
</fieldset>
</form>
</div>
<script type='text/javascript' src='/lib/jquery.min.js'></script>
<script type='text/javascript' src='/lib/bootstrap.min.js'></script>
<script type='text/javascript' src='/lib/require.js' data-main='/bootstrap/main.js'></script>
</body>
</html>
首先需要引入requirejs,指明入口函数(data-main中设定),平时我们自动加载会在html元素上用(ng-app),这里我们采用手动加载的方式。
index.html
<!DOCTYPE html>
<html>
<head>
<title>index</title>
<link rel='stylesheet' href='/stylesheets/style.css' />
<link rel="stylesheet" href="/css/bootstrap.min.css">
</head>
<body>
<div>index 页面!</div>
<script type='text/javascript' src='/lib/jquery.min.js'></script>
<script type='text/javascript' src='/lib/bootstrap.min.js'></script>
<script type='text/javascript' src='/lib/require.js' data-main='/bootstrap/main.js'></script>
</body>
</html>
3.main.js(主要配置下所需的js文件)
require.config({
paths: {
'angular': '../angular/angular',
'angular-cookies': '../angular/angular-cookies',
'angular-route': '../angular/angular-route'
} ,
shim: {
'angular': {
exports: 'angular'
},
'angular-cookies': {
deps: ['angular']
},
'angular-route': {
deps: ['angular']
}
},
deps:['bootstrap']
});
这里主要是需要requirejs异步载入,而deps:['bootstrap']主要是让我先加载这个文件。
4.配置手动加载的文件bootstrap.js
require(['angular', 'angular-cookies','angular-route','../modules/login-module','../controllers/login-controller'], function (angular) {
'use strict';
//手动启动
angular.bootstrap(document, ['login-module']);
});
5.login-module(主要是路由的设置)
define(['angular'], function (ng) {
'use strict';
var app = ng.module('login-module', ['ngCookies']);
return app;
});
6.login-controller(控制器)
define(['../modules/login-module'], function(app) {
'use strict';
app.controller('login-controller',['$scope',function($scope){
$scope.login=function(){
if($scope.username!=""&&$scope.password!=""){
location.href="/";
}
}
}])
});
7.app.js
8.路由
login.js
index.js
![](http://images2015.cnblogs.com/blog/475687/201512/475687-20151224141053218-503412502.png)
2.首页login.html如下:
<!DOCTYPE html>
<html>
<head>
<title>登录界面</title>
<link rel='stylesheet' href='/stylesheets/style.css' />
<link rel="stylesheet" href="/css/bootstrap.min.css">
</head>
<body>
<div class="container" ng-controller="login-controller">
<form class="col-sm-offset-4 col-sm-4 form-horizontal" role="form" method="post" name="myForm" novalidate>
<fieldset>
<legend>用户登录</legend>
<div class="form-group">
<label class="col-sm-3 control-label" for="username">用户名</label>
<div class="col-sm-9">
<input type="text" class="form-control" id="username" name="username" ng-model="username" placeholder="用户名111" required/>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label" for="password">密码</label>
<div class="col-sm-9">
<input type="password" class="form-control" id="password" name="password" ng-model="password" placeholder="密码" required/>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-3 col-sm-9">
<button ng-disabled="myForm.$invalid" ng-click="login()" type="button" class="btn btn-primary">登录</button>
</div>
</div>
</fieldset>
</form>
</div>
<script type='text/javascript' src='/lib/jquery.min.js'></script>
<script type='text/javascript' src='/lib/bootstrap.min.js'></script>
<script type='text/javascript' src='/lib/require.js' data-main='/bootstrap/main.js'></script>
</body>
</html>
首先需要引入requirejs,指明入口函数(data-main中设定),平时我们自动加载会在html元素上用(ng-app),这里我们采用手动加载的方式。
index.html
<!DOCTYPE html>
<html>
<head>
<title>index</title>
<link rel='stylesheet' href='/stylesheets/style.css' />
<link rel="stylesheet" href="/css/bootstrap.min.css">
</head>
<body>
<div>index 页面!</div>
<script type='text/javascript' src='/lib/jquery.min.js'></script>
<script type='text/javascript' src='/lib/bootstrap.min.js'></script>
<script type='text/javascript' src='/lib/require.js' data-main='/bootstrap/main.js'></script>
</body>
</html>
3.main.js(主要配置下所需的js文件)
require.config({
paths: {
'angular': '../angular/angular',
'angular-cookies': '../angular/angular-cookies',
'angular-route': '../angular/angular-route'
} ,
shim: {
'angular': {
exports: 'angular'
},
'angular-cookies': {
deps: ['angular']
},
'angular-route': {
deps: ['angular']
}
},
deps:['bootstrap']
});
这里主要是需要requirejs异步载入,而deps:['bootstrap']主要是让我先加载这个文件。
4.配置手动加载的文件bootstrap.js
require(['angular', 'angular-cookies','angular-route','../modules/login-module','../controllers/login-controller'], function (angular) {
'use strict';
//手动启动
angular.bootstrap(document, ['login-module']);
});
5.login-module(主要是路由的设置)
define(['angular'], function (ng) {
'use strict';
var app = ng.module('login-module', ['ngCookies']);
return app;
});
6.login-controller(控制器)
define(['../modules/login-module'], function(app) {
'use strict';
app.controller('login-controller',['$scope',function($scope){
$scope.login=function(){
if($scope.username!=""&&$scope.password!=""){
location.href="/";
}
}
}])
});
7.app.js
var express = require('express'); var path = require('path'); var favicon = require('serve-favicon'); var logger = require('morgan'); var cookieParser = require('cookie-parser'); var bodyParser = require('body-parser'); var routes = require('./routes/index'); var login = require('./routes/login'); var app = express(); // view engine setup app.set('views', path.join(__dirname, 'views')); //app.set('view engine', 'ejs'); app.engine('html', require('ejs').renderFile); app.set('view engine', 'html'); //app.set('view engine', 'html'); // uncomment after placing your favicon in /public //app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); app.use(logger('dev')); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use(cookieParser()); app.use(express.static(path.join(__dirname, 'public'))); app.use('/', routes); app.use('/login', login); // catch 404 and forward to error handler app.use(function(req, res, next) { var err = new Error('Not Found'); err.status = 404; next(err); }); // error handlers // development error handler // will print stacktrace if (app.get('env') === 'development') { app.use(function(err, req, res, next) { res.status(err.status || 500); res.render('error', { message: err.message, error: err }); }); } // production error handler // no stacktraces leaked to user app.use(function(err, req, res, next) { res.status(err.status || 500); res.render('error', { message: err.message, error: {} }); }); module.exports = app;
8.路由
login.js
var express = require('express'); var router = express.Router(); /* GET users listing. */ router.get('/', function(req, res, next) { res.render('login',{title:"用户登录"}); }) module.exports = router;
index.js
var express = require('express'); var router = express.Router(); /* GET home page. */ router.get('/', function(req, res, next) { res.render('index', { title: 'Express' }); }); module.exports = router;
相关文章推荐
- UIAlertController的一些简单实用方法
- 【转】特殊权限控制之SUID、SGID、Sticky
- PowerBuild利用timing实现同时使用多个定时器
- SQL Server中字符串转化为GUID的标量函数实现
- Duilib界面布局文件XML学习-XML文件简介
- UICollectionView 运用
- processing - MySQL example1-conntction(), query() , next() , getInt(1)
- [转]无需看到你的脸就能认出你——实现Beyond Frontal Faces: Improving Person Recognition Using Multiple Cues
- iOS7/8 UIButton高亮状态延迟问题全解
- Java中parse()和valueOf(),toString()的区别
- SQLiteDatabase query 和 rawQuery 的区别
- IOS UITextField 去除字符串首位空格和换行 设置清除按钮显示模式
- Rescue
- Request&Response编程
- protocol isis issues(续1.3----buffer_size相关)
- Java中String、StringBuilder和StringBuffer的简单区别
- 关于SearchView中onQueryTextSubmit方法执行两次的解决方法
- 用系统的TabBar不让系统渲染图片设置文字背影颜色
- 同步辅助类-DelayQueue队列研究
- 时间戳--UUID