AnjularJS系列3 —— 数据的双向绑定

Posted On the road

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AnjularJS系列3 —— 数据的双向绑定相关的知识,希望对你有一定的参考价值。

 

第三篇,双向的数据绑定

数据绑定是AnguarJS的特性之一,避免书写大量的初始代码从而节约开发时间

数据绑定指令提供了你的Model投射到view的方法。这些投射可以无缝的,毫不影响的应用到web应用中。

(model是应用中的简单数据,view是AngularJS解析后渲染和绑定后生成的html )

传统来说,当model变化了。 开发人员需要手动处理DOM元素并且将属性反映到这些变化中。这个一个双向的过程。

一方面,model变化驱动了DOM中元素变化,

另一方面,DOM元素的变化也会影响到Model。

这个在用户互动中更加复杂,因为开发人员需要处理和解析这些互动,然后融合到一个model中,并且更新View。

这是一个手动的复杂过程,当一个应用非常庞大的时候,将会是一件非常费劲的事情。

AngularJS的双向数据绑定,意味着你可以在Mode(JS)中改变数据,而这些变动立刻就会自动出现在View上,反之亦然。

即:一方面可以做到model变化驱动了DOM中元素变化,另一方面也可以做到DOM元素的变化也会影响到Model。

这段是网上百度的知识理论,现在,我对于所谓MV的概念并不太清晰,

以下为我结合之前写JS的经验得出的心得:

       AngularJS可将一个变量或属性(Model)的值通过{{}}的形式绑定到页面的控件上,

       不需要自行写js对DOM进行操作,减少代码量

1、简单绑定(Model更新View)

 

 1 <div  ng-app="" >
				 2 <div> 3 <label>Name:</label>
				 4<input type="text" ng-model="name"  placeholder="请输入姓名" name="">
				 5 </div> 6<div> 7             <label>问候语:</label>
				 8  <label>Hello,{{name}}</label>
				 9         </div>
				10     </div>  
AngularJS

  代码效果:

 对比:原生js需要对DOM进行操作:

 1 <body>
							 2     <div>
							 3         <label>Name:</label>
							 4         <input type="text" id="name"  placeholder="请输入姓名" onkeyup ="namechange();" name="">
							 5     </div>
							 6     <div>
							 7         <label>问候语:</label>
							 8         <label id="greeting"></label>
							 9     </div>
							10 </body>
							11 <script type="text/javascript"> 
							12     function namechange()
						13     {
					14         var name=document.getElementById(\'name\').value;
				15         document.getElementById(\'greeting\').innerText="Hello,"+name;
			16     }
		17 
		18 </script>
Js

 2、双向绑定(Model更新View,改变View,Model也会自动更新)

<div id="myBind" ng-app="myBind" ng-controller="MyBindctrl">
			<div>
			<label>昵称:</label>
			<select ng-model="selectname" ng-options="x.name for x in nameInfo">
			</select>
			<input type="button" value="获取年龄" ng-click="GetAge();">
			</div>
			<div>
			<label>年龄:</label>
			<label>{{user.agetext}} </label>
			</div>
			</div> 
			</body>
<script type="text/javascript">  
				var myModule = angular.module(\'myBind\', []);
				myModule.controller("MyBindctrl",function($http,$scope){
				$scope.selectname= \'\';
				$scope.nameInfo= [{name:"张立伟",age:20},{name:"闵志涛",age:21},{name:"杨一凡",age:22},{name:"黄征",age:29}];  
				$scope.GetAge=function(){ 
			var _bl=false;
		for(var i=0;i<$scope.nameInfo.length;i++)
		{
	if ($scope.nameInfo[i].name ==  $scope.selectname.name) { 
	$scope.user.agetext= $scope.selectname.name+"今年"+$scope.nameInfo[i].age+"";
	_bl=true;
break;
}
} 
if (!_bl) {
$scope.user.agetext=  "找不到记录";
}
};
}); 
<script>

   代码效果:

 

以上是关于AnjularJS系列3 —— 数据的双向绑定的主要内容,如果未能解决你的问题,请参考以下文章

利刃 MVVMLight 3:双向数据绑定

利刃 MVVMLight 3:双向数据绑定

angularjs系列之双向绑定

anjularjs 指令

AnjularJS系列5 —— scopesmodulecontroller

Vue基础系列数据绑定-单项数据绑定-双向数据绑定-el与data的两种写法