AngularJS ngModel实现指令与输入直接的数据通信

前端之家收集整理的这篇文章主要介绍了AngularJS ngModel实现指令与输入直接的数据通信前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

首先来看一下效果,在拖动input[range]的时候,下面的动画会随着拖动而发生改变,利用的原理就是ngModel实现的通信。实现的原理就是通过在指令中引入^ngModel来实现指令内部与外部之间的通信。

下面有几个点:

1、$formatters中push进去的函数实现modelValue转成valeuValue。 2、$render方法实现把viewValue中的值渲染到模板中。 3、$setViewValue实现的是更新模板中的viewValue值。 4、$parsers中push进去的方法实现valueValue转成modelValue。

<Meta charset="UTF-8"> <animate-span ng-model="rangeModel">

@H_502_22@ var app=angular.module("rangeApp",[]) .controller("rangeCon",["$scope",function ($scope) { $scope.rangeModel=30; }]) .directive("animateSpan",function () { return{ restrict:'EA',replace:true,scope:{},require:'^ngModel',template:'
',link: function (scope,element,attr,ngModelController) { var rotateX= function (modelValue) { var modelValue=parseInt(modelValue)||0; var value="rotateX("+modelValue*3+"deg)"; return { dis:value }; }; var rotateY= function (modelValue) { var modelValue=parseInt(modelValue)||0; var value="rotateY("+modelValue*3+"deg)" return { dis:value } }; var rotateZ= function (modelValue) { var modelValue=parseInt(modelValue)||0; var value="rotateZ("+modelValue*3+"deg)"; return { dis:value } }; //scope.dis=30; ngModelController.$formatters.push(rotateZ);//modelValue到viewValeu之间的通信。 ngModelController.$render= function () {//把viewmodel渲染到模板中 scope.dis=ngModelController.$viewValue.dis; $(element).find("span").css("-webkit-transform",scope.dis) }; scope.$watch('dis',function () {//更新模板上的viewValue ngModelController.$setViewValue({ dis:scope.dis }) }) } } })

以上就是对AngularngModel实现指令与输入直接的数据通信的资料整理,后续继续补充相关资料,谢谢大家对本站的支持

猜你在找的JavaScript相关文章