用angularjs开发下一代web应用(二):angularjs应用骨架(一)
1.调用angularjs
1>加载angularjs库
可以从google的CDN(内容分发网络)中加载,获取快,并且可以在多个应用之间缓存脚本库(建议使用这种方式,但是中国的特殊国情,不能用这种方式):
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.4/angular.min.js"></script>本地主机方式。
2>使用ng-app申明angular的边界
2.MVC
定义控制器的正确方式是,把它定义成模块的一部分,控制器可以为应用里面相关的部分提供命名空间机制。模块可以将东西从全局命名空间隔离开。
<html ng-app='myApp'> <body ng-controller='TextController'> <p>{{someText.message}}</p> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.1/angular.min.js"> </script> <script> var myAppModule = angular.module('myApp', []); myAppModule.controller('TextController', function($scope) { var someText = {}; someText.message = 'You have started your journey.'; $scope.someText = someText; }); </script> </body> </html>3.模板和数据绑定
基本的运作流程如下。
1.用户请求应用起始页。
2.用户的浏览器向服务器发起一次HTTP连接,然后加载index.html页面,这个页面里面包含了模板。
3.Angular被加载到页面中,等待页面加载完成,然后查找ng-app指令,用来定义 模板边界。
4.Angular遍历模板,查找指令和绑定关系,这将触发一系列动作:注册监听器、执行一些DOM操作、从服务器获取初始化数据。这项工作的最后结果是,应用将会
启动起来,并且模板被转换成了DOM视图。
5.连接到服务器去加载需要展示给用户的其他数据。对于每一个Angular应用来说,步骤1到步骤3都是标准化的,步骤4和步骤5是可选的。
这些步骤可以同步进行也可以异步进行。为了提升性能,对于应用中的第一个视图,你可以把数据和HTML模板一起加载进来,从而避免发起多次请求。
4.显示文本
使用ng-bind指令,你可以在UI中的任何地方显示并刷新文本。它还有两种等价形式。
第一种是使用花括号的形式:<p>{{greeting}}</p>
还有一种方式就是使用基于属性的指令,叫做ng-bind:<p ng-bind="greeting"></p>
虽然两种形式的输出内容相同,但是使用双花括号语法的时候,在Angular使用数据替换这些花括号之前,第一个加载的页面,也就是应用中的index.html,其未被渲染好的模板可能会被用户看到。而使用第二种方法的视图就不会遇到这个问题。
在大多数模板中你依然可以使用{{ }}。但是,对于index.html页面中的数据绑定操作,建议使用ng-bind。
5.表单输入
ng-model:将元素绑定到模型属性上。
ng-change:指定一个控制器方法,一旦用户修改了输入值,此方法就会调用。
$watch()函数来监视一个表达式,当这个表达式发生变化时就会调用一个回调函数。
ng-submit、ng-click、ng-dblclick。
<form ng-submit="requestFunding()" ng-controller="StartUpController"> Starting: <input ng-change="computeNeeded()" ng-model="startingEstimate"> Recommendation: {{needed}} <button>Fund my startup!</button> <button ng-click="reset()">Reset</button> </form> function StartUpController($scope) { $scope.computeNeeded = function() { $scope.needed = $scope.startingEstimate * 10; }; $scope.requestFunding = function() { window.alert("Sorry, please get more customers first."); }; $scope.reset = function() { $scope.startingEstimate = 0; }; }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。