当前位置: 首页 > 编程笔记 >

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

芮歌者
2023-03-14
本文向大家介绍AngularJS ngModel实现指令与输入直接的数据通信,包括了AngularJS ngModel实现指令与输入直接的数据通信的使用技巧和注意事项,需要的朋友参考一下

首先来看一下效果,在拖动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实现指令与输入直接的数据通信的资料整理,后续继续补充相关资料,谢谢大家对本站的支持!

 类似资料:
  • 数据传输指令 它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据. 1. 通用数据传送指令. MOV 传送字或字节. MOVSX 先符号扩展,再传送. MOVZX 先零扩展,再传送. PUSH 把字压入堆栈. POP 把字弹出堆栈. PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈. POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈. PUSHAD

  • 本文向大家介绍vue.js通过自定义指令实现数据拉取更新的实现方法,包括了vue.js通过自定义指令实现数据拉取更新的实现方法的使用技巧和注意事项,需要的朋友参考一下 前言 这篇文章的代码片段位于 vue 的单文件组件中,即以 .vue 结尾的文件中,本文说明的只是一种实现方法,既不是唯一的方法也不是最好的方法,如果大家有更好的方法可以留言,大家进行讨论。 第一步 首先,一定要先定义变量: 第二步

  • 我们有一个托管在Google Kubernetes引擎上的NodeJS API,我们想开始将事件记录到BigQuery中。 我可以看到三种不同的方法: 使用API中的节点BigQuery SDK将每个事件直接插入BigQuery(如此处“流式插入示例”下所述):https://cloud.google.com/bigquery/streaming-data-into-bigquery或此处:htt

  • 我有一个数据表与形式输入。 这就是我创造它的方式 我使用以下方法将数据表值传递给控制器 但是当我使用ajax函数提交数据时,我会在expdate列的输入值上得到html标记。我怎样才能得到真正的价值?解释我

  • 使用说明 版本更新记录 概述 适用场景 接入方法 接口形式 使用限额 功能介绍 系统级API接口 设备机型 系统列表 屏幕分辨率 联网方式 用户级API接口 用户应用 调用配额 应用级API接口 渠道列表 版本列表 区服列表 报告级API接口 用户分析 用户趋势 活跃用户 用户画像 地域分布 终端分析 版本分析 实时访客 使用行为 页面分析 页面路径 使用习惯 事件 事件分析 事件趋势 事件参数

  • 本文向大家介绍Android实现可输入数据的弹出框,包括了Android实现可输入数据的弹出框的使用技巧和注意事项,需要的朋友参考一下 之前一篇文章,介绍了如何定义从屏幕底部弹出PopupWindow即《Android Animation实战之屏幕底部弹出PopupWindow》,写完之后,突然想起之前写过自定义内容显示的弹出框,就随手写了两个实例,分享出来: 第一种实现方式:继承Dialog 1

  • 问题内容: 我想知道是否有可能扩展Angular的输入指令?我想将一些侦听器附加到页面上的所有输入字段。我认为您可以使用来装饰现有模块,但我不知道如何使用指令(更确切地说是输入指令)来完成此操作。 那么,谁能将我推向正确的方向呢?一些例子? 编辑 到目前为止,这是我的指令: 在我看来,可以将其添加到输入字段中,如下所示: 缺点是,对于每个输入字段,我都必须在代码中手动附加此侦听器。因此,更改现有的

  • 本文向大家介绍Java实现把excel xls中数据转为可直接插入数据库的sql文件,包括了Java实现把excel xls中数据转为可直接插入数据库的sql文件的使用技巧和注意事项,需要的朋友参考一下 我的一贯风格,代码说明一切。。 废话不多说了,直接给大家贴代码了,具体代码如下所示: 有关Java实现把excel xls中数据转为可直接插入数据库的sql文件的知识,小编就给大家介绍这么多,希望