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


Posted in Javascript onSeptember 21, 2016

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

下面有几个点:

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

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

<!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实现指令与输入直接的数据通信的资料整理,后续继续补充相关资料,谢谢大家对本站的支持!

Javascript 相关文章推荐
javascript函数作用域学习示例(js作用域)
Jan 13 Javascript
通过Javascript读取本地Excel文件内容的代码示例
Apr 08 Javascript
jQuery中DOM树操作之复制元素的方法
Jan 23 Javascript
Javascript中Array用法实例分析
Jun 13 Javascript
javascript同步服务器时间和同步倒计时小技巧
Sep 24 Javascript
谈一谈javascript中继承的多种方式
Feb 19 Javascript
Javascript实现鼠标框选操作  不是点击选取
Apr 14 Javascript
JQuery EasyUI 结合ztrIee的后台页面开发实例
Sep 01 jQuery
javascript基于牛顿迭代法实现求浮点数的平方根【递归原理】
Sep 28 Javascript
vue-quill-editor+plupload富文本编辑器实例详解
Oct 19 Javascript
js canvas实现二维码和图片合成的海报
Nov 19 Javascript
解决vue net :ERR_CONNECTION_REFUSED报错问题
Aug 13 Javascript
D3.js实现折线图的方法详解
Sep 21 #Javascript
利用BootStrap弹出二级对话框的简单实现方法
Sep 21 #Javascript
angular route中使用resolve在uglify压缩后问题解决
Sep 21 #Javascript
使用bootstrap validator的remote验证代码经验分享(推荐)
Sep 21 #Javascript
D3.js实现柱状图的方法详解
Sep 21 #Javascript
AngularJS ng-style中使用filter
Sep 21 #Javascript
BootStrap与validator 使用笔记(JAVA SpringMVC实现)
Sep 21 #Javascript
You might like
php中session_unset与session_destroy的区别分析
2011/06/16 PHP
PHP中使用smarty生成静态文件的例子
2014/04/24 PHP
jQuery Mobile + PHP实现文件上传
2014/12/12 PHP
快速解决PHP调用Word组件DCOM权限的问题
2017/12/27 PHP
php实现等比例压缩图片
2018/07/26 PHP
仿百度输入框智能提示的js代码
2013/08/22 Javascript
深入理解javascript构造函数和原型对象
2014/09/23 Javascript
全面了解函数声明与函数表达式、变量提升
2016/08/09 Javascript
如何解决jQuery EasyUI 已打开Tab重新加载问题
2016/12/19 Javascript
获取JavaScript异步函数的返回值
2016/12/21 Javascript
javascript数据结构中栈的应用之符号平衡问题
2017/04/11 Javascript
jquery.validate.js 多个相同name的处理方式
2017/07/10 jQuery
JavaScript使用Ajax上传文件的示例代码
2017/08/10 Javascript
JS实现导出Excel的五种方法详解【附源码下载】
2018/03/15 Javascript
[02:26]2016国际邀请赛8月3日开战 中国军团出征西雅图
2016/08/02 DOTA
微信跳一跳python自动代码解读1.0
2018/01/12 Python
Python使用tkinter库实现文本显示用户输入功能示例
2018/05/30 Python
在Python中增加和插入元素的示例
2018/11/01 Python
python for循环输入一个矩阵的实例
2018/11/14 Python
Python离线安装PIL 模块的方法
2019/01/08 Python
Python3 读取Word文件方式
2020/02/13 Python
Python 解决火狐浏览器不弹出下载框直接下载的问题
2020/03/09 Python
python异常处理之try finally不报错的原因
2020/05/18 Python
美国相机和电子产品零售商:Beach Camera
2020/11/26 全球购物
介绍一下SQL Server的全文索引
2013/08/15 面试题
学校庆元旦歌咏比赛主持词
2014/03/18 职场文书
医学求职自荐信
2014/06/21 职场文书
励志演讲稿600字
2014/08/21 职场文书
2014年结对帮扶工作总结
2014/12/17 职场文书
红色经典观后感
2015/06/18 职场文书
人民调解协议书
2016/03/21 职场文书
浅谈Nginx 中的两种限流方式
2021/03/31 Servers
Mysql实现主从配置和多主多从配置
2021/06/02 MySQL
浅谈Python数学建模之线性规划
2021/06/23 Python
MySQL sql模式设置引起的问题
2022/05/15 MySQL
Springboot中如何自动转JSON输出
2022/06/16 Java/Android