zoukankan      html  css  js  c++  java
  • ngModelController

    ng-model 指令所对应的ngModelController(数据绑定,验证,css更新,格式化)

    <form name="myForm">
     <div contenteditable
      name="myWidget" ng-model="userContent"
      strip-br="true"
      required>Change me!</div>
      <span ng-show="myForm.myWidget.$error.required">Required!</span>
     <hr>
     <textarea ng-model="userContent"></textarea>
    </form>
    angular.module('customControl', []).directive('contenteditable',function() {
     return {
        restrict: 'A', // 作为元素属性 
        require: '?ngModel', // 获取ngModelController 
        link: function(scope, element, attrs, ngModel) 
        { 
           if(!ngModel) return; // 如果没有ng-model则什么都不做    
           // 指定UI的更新方式
          ngModel.$render = function() {
            element.html(ngModel.$viewValue || '');
          };
    
          // 监听change事件来开启绑定
          element.on('blur keyup change', function() {
            scope.$apply(read);
          });
          read(); // 初始化
    
          // 将数据写入model
          function read() {
            var html = element.html();
            // 当我们清空div时浏览器会留下一个<br>标签
            // 如果制定了strip-br属性,那么<br>标签会被清空
            if( attrs.stripBr && html == '<br>' ) {
              html = '';
            }
           ngModel.$setViewValue(html);
          }
       }
    };});
      • $render()  //当视图需要更新的时候会被调用。
      • $isEmpty(value)
      • $setValidity(errorKey,isValid)
      • $setPristine()
      • $cancelUpdate()
      • $setViewValue()
      • $viewValue
      • $modelValue
      • $parsers  //dom读取值经过函数管道传递到model中,用于验证
      • $formatters  //model变化时把值经过函数管道传递到视图, 只有model在代码中改变时才能触发formatter
      • $viewChangeListeners
      • $error
      • $pristine
      • $dirty
      • $valid
      • $invalid

    $parsers

    <form role="form" name="myform">
        <div class="form-group">
            <label>View Value:</label>
            <input name="someinput" changecase="" ng-model="some_letters.value">
        </div>
    </form>
    
    <strong>ModelValue:</strong>   <br>
    var view_value;
    ngModel.$parsers.push(function(value){
    
        var return_value;
    
        if(value.length > 5){  //效果,输入字符无法超过5个
            return_value = view_value;
            ngModel.$setViewValue(view_value);
            ngModel.$render();
            ngModel.$setValidity('is_valid', false);
        } else {
            return_value = value;
            view_value = return_value;
            ngModel.$setValidity('is_valid', true);
        }
    
        return return_value;
    });

    https://docs.angularjs.org/api/ng/type/ngModel.NgModelController

    http://sentsin.com/web/659.html

  • 相关阅读:
    nginx中的location匹配规则介绍
    有关博客更新的说明
    nginx配置不同路径下的转发代理
    laravel-admin使editormd支持粘贴截图并自动生成简介
    ERROR [HY000][1822]: Failed to add the foreign key constraint.
    MySQL如何只获得查询结果的前n条数据
    Java常用日期操作
    网络工具_nc
    kali安装工具
    有趣的小东西--打印彩色系统信息
  • 原文地址:https://www.cnblogs.com/yfann/p/4584717.html
Copyright © 2011-2022 走看看