国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

AngularJS ngModel實現指令與輸入直接的數據通信

2019-11-20 08:55:36
字體:
來源:轉載
供稿:網友

首先來看一下效果,在拖動input[range]的時候,下面的動畫會隨著拖動而發生改變,利用的原理就是ngModel實現的通信。實現的原理就是通過在指令中引入^ngModel來實現指令內部與外部之間的通信。

下面有幾個點:

1、$formatters中push進去的函數實現modelValue轉成valeuValue。
2、$render方法實現把viewValue中的值渲染到模板中。
3、$setViewValue實現的是更新模板中的viewValue值。
4、$parsers中push進去的方法實現valueValue轉成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; /* 數值提示 只能是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實現指令與輸入直接的數據通信的資料整理,后續繼續補充相關資料,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 巴彦淖尔市| 西藏| 固始县| 清镇市| 瑞金市| 湟中县| 孝昌县| 文登市| 隆回县| 青阳县| 威信县| 罗田县| 万荣县| 衡阳市| 松滋市| 隆化县| 剑阁县| 绥滨县| 察隅县| 伊川县| 古浪县| 田东县| 河津市| 永康市| 花垣县| 林州市| 绩溪县| 黎城县| 万荣县| 专栏| 喀喇| 南和县| 莎车县| 洛南县| 天峨县| 张家界市| 吕梁市| 密山市| 通榆县| 闵行区| 崇阳县|