Note05--双向数据绑定
来源:互联网 发布:淘宝网电动车 编辑:程序博客网 时间:2024/04/27 23:07
1. 双向指的是:数据模型--》视图;视图--》数据模型;2. 绑定的方式: a. Ng-bind 或者 双括号; i. 双括号方式,在网络不好的情况下,会出现双括号显示在页面中; ii. 使用ng-bind方式而不是{{ ** }}方式绑定值; b. 两者使用的原则: i. 在首页index.html中,使用ng-bind方式,之后使用双括号方式就可以避免这种问题;原因是一般在首页上加载angular库,之后的页面都全部由angular管理,这样之后双括号就OK了;3. 为什么需要双向数据绑定? a. 使用场景:Form表单; b. e.g. i. Form.html
<!doctype html><html ng-app="UserInfoModule"><head> <meta charset="utf-8"> <link rel="stylesheet" href="css/bootstrap-3.0.0/css/bootstrap.css"> <script src="js/angular-1.3.0.js"></script> <script src="Form.js"></script></head><body> <div class="panel panel-primary"> <div class="panel-heading"> <div class="panel-title">双向数据绑定</div> </div> <div class="panel-body"> <div class="row"> <div class="col-md-12"> <form class="form-horizontal" role="form" ng-controller="UserInfoCtrl"> <div class="form-group"> <label class="col-md-2 control-label"> 邮箱: </label> <div class="col-md-10"> <input type="email" class="form-control" placeholder="推荐使用126邮箱" ng-model="userInfo.email"> </div> </div> <div class="form-group"> <label class="col-md-2 control-label"> 密码: </label> <div class="col-md-10"> <input type="password" class="form-control" placeholder="只能是数字、字母、下划线" ng-model="userInfo.password"> </div> </div> <div class="form-group"> <div class="col-md-offset-2 col-md-10"> <div class="checkbox"> <label> <input type="checkbox" ng-model="userInfo.autoLogin">自动登录 </label> </div> </div> </div> <div class="form-group"> <div class="col-md-offset-2 col-md-10"> <button class="btn btn-default" ng-click="getFormData()">获取Form表单的值</button> <button class="btn btn-default" ng-click="setFormData()">设置Form表单的值</button> <button class="btn btn-default" ng-click="resetForm()">重置表单</button> </div> </div> </form> </div> </div> </div> </div></body></html>
ii. Form.js
var userInfoModule = angular.module('UserInfoModule', []);userInfoModule.controller('UserInfoCtrl', ['$scope', function($scope) { $scope.userInfo = { email: "253445528@qq.com", password: "253445528", autoLogin: true }; $scope.getFormData = function() { console.log($scope.userInfo); }; $scope.setFormData = function() { $scope.userInfo = { email: 'damoqiongqiu@126.com', password: 'damoqiongqiu', autoLogin: false } }; $scope.resetForm = function() { $scope.userInfo = { email: "253445528@qq.com", password: "253445528", autoLogin: true }; } }])
c. 一个双向数据绑定常用的例子:通过绑定的值改变样式或者其他 i. CSS1.html
<!doctype html><html ng-app="MyCSSModule"><head> <meta charset="utf-8"> <link rel="stylesheet" href="CSS1.css"></head><body> <div ng-controller="CSSCtrl"> <p class="text-{{color}}">测试CSS样式</p> <button class="btn btn-default" ng-click="setGreen()">绿色</button> </div></body><script src="js/angular-1.3.0.js"></script><script src="CSS1.js"></script></html>
ii. CSS1.js
var myCSSModule = angular.module('MyCSSModule', []);myCSSModule.controller('CSSCtrl', ['$scope', function($scope) { $scope.color = "red"; $scope.setGreen = function() { $scope.color = "green"; } }])
iii. CSS1.css
.text-red { background-color: #ff0000;}.text-green { background-color: #00ff00;}
4. Ng-class: 可以接受表达式; a. NgClass.html
<!doctype html><html ng-app="MyCSSModule"><head> <meta charset="utf-8"> <link rel="stylesheet" href="NgClass.css"></head><body> <div ng-controller='HeaderController'> <div ng-class='{error: isError, warning: isWarning}'>{{messageText}}</div> <button ng-click='showError()'>Simulate Error</button> <button ng-click='showWarning()'>Simulate Warning</button> </div></body><script src="js/angular-1.3.0.js"></script><script src="NgClass.js"></script></html>
b. NgClass.js
var myCSSModule = angular.module('MyCSSModule', []);myCSSModule.controller('HeaderController', ['$scope', function($scope) { $scope.isError = false; $scope.isWarning = false; $scope.showError = function() { $scope.messageText = 'This is an error!'; $scope.isError = true; $scope.isWarning = false; }; $scope.showWarning = function() { $scope.messageText = 'Just a warning. Please carry on.'; $scope.isWarning = true; $scope.isError = false; }; }])
c. NgClass.css
.error { background-color: red;}.warning { background-color: yellow;}
5. Ng-show 和 ng-hide控制显示和隐藏 a. NgShow.html
<!doctype html><html ng-app="MyCSSModule"><head> <meta charset="utf-8"></head><body> <div ng-controller='DeathrayMenuController'> <button ng-click='toggleMenu()'>Toggle Menu</button> <ul ng-show='menuState.show'> <li ng-click='stun()'>Stun</li> <li ng-click='disintegrate()'>Disintegrate</li> <li ng-click='erase()'>Erase from history</li> </ul> <div/></body><script src="js/angular-1.3.0.js"></script><script src="NgShow.js"></script></html>
b. NgShow.js
var myCSSModule = angular.module('MyCSSModule', []);myCSSModule.controller('DeathrayMenuController', ['$scope', function($scope) { $scope.menuState={show:false}; $scope.toggleMenu = function() { $scope.menuState.show = !$scope.menuState.show; }; }])
6. Ng-animate a. http://css.doyoe.com b. E.g. i. Index.html
<!doctype html><html ng-app="bookStoreApp"><head> <meta charset="UTF-8"> <title>BookStore</title> <link rel="stylesheet" href="framework/bootstrap-3.0.0/css/bootstrap.min.css"> <link rel="stylesheet" href="framework/bootstrap-3.0.0/css/bootstrap.theme.min.css"> <link rel="stylesheet" href="css/index.css"> <script src="framework/1.3.0.14/angular.js"></script> <script src="framework/1.3.0.14/angular-route.js"></script> <script src="framework/1.3.0.14/angular-animate.js"></script> <script src="js/app.js"></script> <script src="js/controllers.js"></script> <script src="js/filters.js"></script> <script src="js/services.js"></script> <script src="js/directives.js"></script></head><body> <div class="page {{pageClass}}" ng-view> </div></body></html>
ii. Index.css
.page { bottom:0; padding-top:200px; position:absolute; text-align:center; top:0; width:100%;}.page h1 { font-size:60px;}.page a { margin-top:50px;}.hello { background:#00D0BC; color:#FFFFFF;}.list{ background:#E59400; color:#FFFFFF;}@keyframes rotateFall { 0% { transform: rotateZ(0deg); } 20% { transform: rotateZ(10deg); animation-timing-function: ease-out; } 40% { transform: rotateZ(17deg); } 60% { transform: rotateZ(16deg); } 100% { transform: translateY(100%) rotateZ(17deg); }}@keyframes slideOutLeft { to { transform: translateX(-100%); }}@keyframes rotateOutNewspaper { to { transform: translateZ(-3000px) rotateZ(360deg); opacity: 0; }}@keyframes scaleUp { from { opacity: 0.3; -webkit-transform: scale(0.8); }}@keyframes slideInRight { from { transform:translateX(100%); } to { transform: translateX(0); }}@keyframes slideInUp { from { transform:translateY(100%); } to { transform: translateY(0); }}.ng-enter { z-index: 8888;}.ng-leave { z-index: 9999;}.hello.ng-enter { animation: scaleUp 0.5s both ease-in;}.hello.ng-leave { transform-origin: 0% 0%; animation: rotateFall 1s both ease-in;}.list.ng-enter { animation:slideInRight 0.5s both ease-in;}.list.ng-leave { animation:slideOutLeft 0.5s both ease-in;}
iii. App.js
var bookStoreApp = angular.module('bookStoreApp', [ 'ngRoute', 'ngAnimate', 'bookStoreCtrls', 'bookStoreFilters', 'bookStoreServices', 'bookStoreDirectives']);bookStoreApp.config(function($routeProvider) { $routeProvider.when('/hello', { templateUrl: 'tpls/hello.html', controller: 'HelloCtrl' }).when('/list', { templateUrl: 'tpls/bookList.html', controller: 'BookListCtrl' }).otherwise({ redirectTo: '/hello' })});
iv. Controllers.js
var bookStoreCtrls = angular.module('bookStoreCtrls', []);bookStoreCtrls.controller('HelloCtrl', ['$scope', function($scope) { $scope.greeting = { text: 'Hello' }; $scope.pageClass="hello"; }]);bookStoreCtrls.controller('BookListCtrl', ['$scope', function($scope) { $scope.books = [{ title: "《Ext江湖》", author: "大漠穷秋" }, { title: "《ActionScript游戏设计基础(第二版)》", author: "大漠穷秋" }, { title: "《用AngularJS开发下一代WEB应用》", author: "大漠穷秋" }]; $scope.pageClass="list"; }]);/** * 这里接着往下写,如果控制器的数量非常多,需要分给多个开发者,可以借助于grunt来合并代码 */
v. Services.js
var bookStoreServices = angular.module('bookStoreServices', []);bookStoreServices.service('bookStoreService_1', ['$scope', function($scope) {}]);bookStoreServices.service('bookStoreService_2', ['$scope', function($scope) {}]);vi. Directive.jsvar bookStoreDirectives = angular.module('bookStoreDirectives', []);bookStoreDirectives.directive('bookStoreDirective_1', ['$scope', function($scope) {}]);bookStoreDirectives.directive('bookStoreDirective_2', ['$scope', function($scope) {}]);vii. Filters.jsvar bookStoreFilters = angular.module('bookStoreFilters', []);bookStoreFilters.filter('bookStoreFilter_1', ['$scope', function($scope) {}]);bookStoreFilters.filter('bookStoreFilter_2', ['$scope', function($scope) {}]);
viii. bookList.html
<ul> <li ng-repeat="book in books"> 书名:{{book.title}} 作者:{{book.author}} </li></ul>
ix. Hello.html
<p>{{greeting.text}},Angular</p><p><a href="#/list">下一页</a></p>
0 0
- Note05--双向数据绑定
- Note05
- GridView双向数据绑定
- AngularJS双向数据绑定
- 双向数据绑定
- angular-数据双向绑定
- Angular双向数据绑定
- Angular双向数据绑定
- Vue--数据双向绑定
- Angular双向数据绑定
- angualrjs双向数据绑定
- 双向数据绑定原理
- Vue双向数据绑定
- 双向数据绑定
- JavaSript数据双向绑定
- 数据双向绑定
- 双向数据绑定
- Angular2+ 双向数据绑定
- Note04--路由 && 模块 && 依赖注入
- 问题六十三:怎么用ray tracing画sphere sweeping图形(2)——teapot
- 实现 防止视频被下载功能
- ZCC loves straight flush HDU - 5228(暴力)
- String类处理字符串
- Note05--双向数据绑定
- Hibernate占位符?和:及JPA
- 史上最简单的 Spring MVC 教程(一)
- 自学笔记2-eclipese下web的环境配置
- 人见人爱A^B
- Simple MySQL-C ORM - 简化C语言访问MySQL
- 最小公倍数
- 创建ADV时产生异常指点
- 根据美工给的标有像素的样写布局文件来适配