这里有新鲜出炉的 AngularJS 开发指南,程序狗速度看过来!
AngularJS 诞生于 Google 是一款优秀的前端 JS 框架,已经被用于 Google 的多款产品当中。AngularJS 有着诸多特性,最为核心的是:MVC、模块化、自动化双向数据绑定、语义化标签、依赖注入,等等。
AngularJS 是一款客户端 MVC 的 javascript 框架,而客户端 MVC 代表未来架构 (为什么要使用 MVC+REST+CQRS 架构),如果你有 Struts 或 SpringMVC 等后端 MVC 框架编程经验,学习 Angular 会很快,基本是按照同一个 MVC 思路实现的,本文给大家介绍 AngularJS+html+Groovy 实现登录功能
AngularJS 是开发基于浏览器的响应式 RWD 应用程序的一个前端 MVC 框架,由谷歌最初开发的 开源项目,干净的架构吸引了大量粉丝,适合建立 CRUD 类型的业务应用程序,并不适合开发游戏等应用, 使用声明性编程的用户界面和命令式编程的逻辑, 支持现代桌面和移动浏览器 Internet Explorer 版本 8.0 及以上。
AngularJS 是一款客户端 MVC 的 javascript 框架,而客户端 MVC 代表未来架构 (为什么要使用 MVC+REST+CQRS
架构),如果你有 Struts 或 SpringMVC 等后端 MVC 框架编程经验,学习 Angular 会很快,基本是按照同一个 MVC 思路实现的。
1 AngularJS
AngularJS 除了内置的指令外,我们还可以创建自定义指令。你可以使用 .directive 函数来添加自定义的指令。要调用自定义指令,HTMl 元素上需要添加自定义指令名。使用驼峰法来命名一个指令, runoobDirective , 但在使用它时需要以 - 分割, runoob-directive :
- <body ng-app="myApp">
- <runoob-directive>
- </runoob-directive>
- <script>
- var app = angular.module("myApp", []);
- app.directive("runoobDirective",
- function() {
- return {
- template: "<h>自定义指令!</h>"
- };
- });
- </script>
- </body>
AngularJS 还可以定义过滤器,如下所示:
- <div ng-app="myApp" ng-controller="costCtrl">
- <input type="number" ng-model="quantity">
- <input type="number" ng-model="price">
- <p>
- 总价 = {{ (quantity * price) | currency }}
- </p>
- </div>
AngularJS 有自己的 HTML 事件处理方式:
- <div ng-app="myApp" ng-controller="personCtrl">
- <button ng-click="toggle()">
- >隐藏/显示
- </button>
- <p ng-hide="myVar">
- 名:
- <input type="text" ng-model="firstName">
- <br>
- 姓名:
- <input type="text" ng-model="lastName">
- <br>
- <br>
- Full Name: {{firstName + " " + lastName}}
- </p>
- </div>
- <script>
- var app = angular.module('myApp', []);
- app.controller('personCtrl',
- function($scope) {
- $scope.firstName = "John",
- $scope.lastName = "Doe"$scope.myVar = false;
- $scope.toggle = function() {
- $scope.myVar = !$scope.myVar;
- };
- });
- </script>
另外 AngularJS 的首选样式表是 Twitter Bootstrap, Twitter Bootstrap 是目前最受欢迎的前端框架。
- <!DOCTYPE html>
- <html>
- <link rel="stylesheet" href="http://apps.bdimg.com/libs/bootstrap/../CSS/bootstrap.min.css">
- <script src="http://apps.bdimg.com/libs/angular.js/../angular.min.js">
- </script>
- <body ng-app="myApp" ng-controller="userCtrl">
- <div class="container">
- <h>
- Users
- </h>
- <table class="table table-striped">
- <thead>
- <tr>
- <th>
- Edit
- </th>
- <th>
- First Name
- </th>
- <th>
- Last Name
- </th>
- </tr>
- </thead>
- <tbody>
- <tr ng-repeat="user in users">
- <td>
- <button class="btn" ng-click="editUser(user.id)">
- <span class="glyphicon glyphicon-pencil">
- </span>
- Edit
- </button>
- </td>
- <td>
- {{ user.fName }}
- </td>
- <td>
- {{ user.lName }}
- </td>
- </tr>
- </tbody>
- </table>
- <hr>
- <button class="btn btn-success" ng-click="editUser('new')">
- <span class="glyphicon glyphicon-user">
- </span>
- Create New User
- </button>
- <hr>
- <h ng-show="edit">
- Create New User:
- </h>
- <h ng-hide="edit">
- Edit User:
- </h>
- <form class="form-horizontal">
- <div class="form-group">
- <label class="col-sm- control-label">
- First Name:
- </label>
- <div class="col-sm-">
- <input type="text" ng-model="fName" ng-disabled="!edit" placeholder="First Name">
- </div>
- </div>
- <div class="form-group">
- <label class="col-sm- control-label">
- Last Name:
- </label>
- <div class="col-sm-">
- <input type="text" ng-model="lName" ng-disabled="!edit" placeholder="Last Name">
- </div>
- </div>
- <div class="form-group">
- <label class="col-sm- control-label">
- Password:
- </label>
- <div class="col-sm-">
- <input type="password" ng-model="passw" placeholder="Password">
- </div>
- </div>
- <div class="form-group">
- <label class="col-sm- control-label">
- Repeat:
- </label>
- <div class="col-sm-">
- <input type="password" ng-model="passw" placeholder="Repeat Password">
- </div>
- </div>
- </form>
- <hr>
- <button class="btn btn-success" ng-disabled="error || incomplete">
- <span class="glyphicon glyphicon-save">
- </span>
- Save Changes
- </button>
- </div>
- <script src="myUsers.js">
- </script>
- </body>
- </html>
以上代码都是参看 http://www.runoob.com/angularjs/ ,更多的资料可以参看 http://www.runoob.com/angularjs/
2 Groovy
有人说,有 java 就有 groovy,用 groovy, 我们可以使用 grails 框架,感觉用来开发 web 应用非常很方便。Groovy 的语句和 Java 类似,但是有一些特殊的地方。例如语句的分号是可选的。如果每行一个语句,就可以省略分号;如果一行上有多个语句,则需要用分号来分隔。 Groovy 中的字符串允许使用双引号和单引号。 当使用双引号时,可以在字符串内嵌入一些运算式,Groovy 允许您使用 与 bash 类似的 ${expression} 语法进行替换。可以在字符串中包含任意的 Groovy 表达式。
- name="James"
- println "My name is ${name},'00${6+1}'" //prints My name is James,'007'
如果有一大块文本, 它需要类似 Python 的三重引号 (""") 开头,并以三重引号结尾。
- name = "James"
- text = """
- hello
- there ${name} how are you today?
- """
3 登录实现
AngularJS 指令是扩展的 HTML 属性,带有前缀 ng- 。 ng-app 指令初始化一个 AngularJS 应用程序。 ng-init 指令初始化应用程序数据。 ng-model 指令把元素值(比如输入域的值)绑定到应用程序。下面的 index.html 定义了一个用户名和一个密码输入框控件,
AngularJS 应用程序 app(实际上是 app.js 来处理) 由 ng-app 定义。 ng-controller="LoginController" 属性是一个 AngularJS 指令。用于定义一个控制器。 LoginController 函数是一个 JavaScript 函数。AngularJS 使用 $scope 对象来调用控制器,用 $scope 用来保存 AngularJS Model(模型) 的对象。控制器在作用域中创建了两个属性 (username 和 password)。 ng-model 指令绑定输入域到控制器的属性( username 和 password )。ng-submit="login()" 绑定了后台 login() 方法。
- <!DOCTYPE html>
- <!--index.html -->
- <html ng-app="app" lang="en">
- <head>
- <meta charset="UTF-">
- <title>
- Title
- </title>
- <script src="angular.min.js">
- </script>
- <script src="scripts/app.js">
- </script>
- </head>
- <body ng-controller="LoginController">
- <form ng-submit="login()">
- <h>
- 用户名:
- </h>
- <input ng-model="user.username">
- <h>
- 密码:
- </h>
- <input ng-model="user.password">
- <h>
- {{info}}
- </h>
- <br>
- <input type="submit" value="登陆">
- </form>
- </body>
- </html>
app.js 中定义了名为 app 模块,对应 html 页面的 ng-app="app", 其中在 $scope 定义了 user 和 info 可以用于前台模型绑定,另外定义了一个 login() 方法供前台提交调用。 $http 是 AngularJS 中的一个核心服务,用于读取远程服务器的数据。
- /**
- * app.js angular module define
- */
- //ng-app="app"
- angular.module('app', [])
- //ng-controller="LoginController"
- .controller('LoginController',
- function($scope, $http) {
- //user model define
- //ng-model="user.username"
- $scope.user = {}
- $scope.info = '欢迎登陆'
- //ng-submit="login()"
- $scope.login = function() {
- console.log($scope.user)
- //Application.groovy post
- $http.post('/login', $scope.user).then(function(res) {
- console.log(res.data) if (res.status == ) {
- alert('登陆成功')
- }
- },
- function(reason) {
- //{{info}}
- $scope.info = reason.data;
- })
- }
- });
下面用 Groovy 编写的登录后台处理逻辑:
- /**
- * Application.groovy
- */
- import groovy.json.JsonBuilder
- import groovy.json.JsonSlurper
- import groovy.sql.Sql
- import static spark.Spark.*;
- class Application {
- static JsonSlurper jsonSlurper = new JsonSlurper()
- static Sql db = Sql.newInstance("jdbc:jtds:sqlserver://...:/lrtest;instance=sql",
- "username", "password"
- , "net.sourceforge.jtds.jdbc.Driver")
- public static void main(String[] args) {
- port()
- //default index.html
- staticFileLocation("/static");
- get("/hello", { req, res -> "Hello World" });
- //app.js $http.post('/login', $scope.user)
- post('/login', { req, res ->
- //debug
- println(req.body())
- def user = jsonSlurper.parseText(req.body())
- //debug
- println(user)
- def u = db.firstRow("select * from test_user WHERE username = ?.username and password = ?.password", user)
- if (u) {
- //return
- halt(, new JsonBuilder(u).toString())
- } else {
- halt(, '用户名密码不正确')
- }
- })
- }
- }
为了更加直观表示各组成部分之间的关系,用下面的一张图来描述三者如何进行关联:
以上内容是基于 AngularJS+HTML+Groovy 实现登录功能的相关知识,希望对大家有所帮助。
来源: http://www.phperz.com/article/17/0628/267118.html