AngularJS ngModel實現(xiàn)指令與輸入直接的數(shù)據(jù)通信
首先來看一下效果,在拖動input[range]的時候,下面的動畫會隨著拖動而發(fā)生改變,利用的原理就是ngModel實現(xiàn)的通信。實現(xiàn)的原理就是通過在指令中引入^ngModel來實現(xiàn)指令內(nèi)部與外部之間的通信。
下面有幾個點:
1、$formatters中push進(jìn)去的函數(shù)實現(xiàn)modelValue轉(zhuǎn)成valeuValue。
2、$render方法實現(xiàn)把viewValue中的值渲染到模板中。
3、$setViewValue實現(xiàn)的是更新模板中的viewValue值。
4、$parsers中push進(jìn)去的方法實現(xiàn)valueValue轉(zhuǎn)成modelValue。

<!DOCTYPE html>
<html lang="en" ng-app="rangeApp">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<script src="lib/angular.min.js" type="text/javascript"></script>
<script src="lib/jquery-2.1.4.min.js" type="text/javascript"></script>
<style>
div{
position: absolute;
}
.ani{
width: 200px;
height: 200px;
border: 1px solid aqua;
position: absolute;
top: 100px;
left: 200px;
-webkit-transform: rotateX(120deg);
-moz-transform: rotateX(120deg);
-ms-transform: rotateX(120deg);
-o-transform: rotateX(120deg);
transform: rotateX(20deg);
}
.active{
background: red;
}
::-webkit-slider-runnable-track {
border: 1px solid #a0b3d6;
background: #f0f3f9;
}
::-webkit-slider-thumb {
outline: 1px dotted #a0b3d6;
background-color: #34538b;
}
::-webkit-slider-runnable-track:hover {
background-color: #cad5eb;
}
::-moz-range-track {
border: 1px solid #a0b3d6;
height: 20px;
background: #f0f3f9;
}
::-moz-range-thumb {
background: #34538b;
height: 30px;
}
::-ms-fill-lower { background: orange; }
::-ms-fill-upper { background: green; }
::-ms-thumb { background: red; }
::-ms-ticks-before { display: block; color: black; }
::-ms-ticks-after { display: block; color: blue; }
::-ms-track { padding: 5px; }
::-ms-tooltip { display: none; /* 數(shù)值提示 只能是display或visibility */ }
</style>
<body ng-controller="rangeCon">
<input type="range" ng-model="rangeModel"/>
<animate-span ng-model="rangeModel"></animate-span>
</body>
<script>
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:'<div><span class="ani" ng-model="dis">{{dis}}</span></div>',
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
})
})
}
}
})
</script>
</html>
以上就是對AngularngModel實現(xiàn)指令與輸入直接的數(shù)據(jù)通信的資料整理,后續(xù)繼續(xù)補充相關(guān)資料,謝謝大家對本站的支持!
相關(guān)文章
Angular.js組件之input mask對input輸入進(jìn)行格式化詳解
這篇文章主要給大家介紹了關(guān)于Angular.js組件之input mask對input輸入進(jìn)行格式化的相關(guān)內(nèi)容,文中通過示例代碼詳細(xì)介紹了將銀行卡號和日期的方法,需要的朋友們可以參考借鑒,下面來一起看看吧。2017-07-07
Angular.JS中指令ng-if的注意事項小結(jié)
這篇文章主要給大家分享了關(guān)于Angular.JS中指令ng-if的一點注意事項,分享出來供大家參考學(xué)習(xí),文中介紹的還是相對來說比較詳細(xì),對大家具有一定的參考借鑒價值,需要的朋友們下面來一起看看吧。2017-06-06
Angular中的結(jié)構(gòu)指令模式及使用詳解
這篇文章主要為大家介紹了Angular中的結(jié)構(gòu)指令模式及使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08

