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

  • 相关阅读:
    (BFS 二叉树) leetcode 515. Find Largest Value in Each Tree Row
    (二叉树 BFS) leetcode513. Find Bottom Left Tree Value
    (二叉树 BFS DFS) leetcode 104. Maximum Depth of Binary Tree
    (二叉树 BFS DFS) leetcode 111. Minimum Depth of Binary Tree
    (BFS) leetcode 690. Employee Importance
    (BFS/DFS) leetcode 200. Number of Islands
    (最长回文子串 线性DP) 51nod 1088 最长回文子串
    (链表 importance) leetcode 2. Add Two Numbers
    (链表 set) leetcode 817. Linked List Components
    (链表 双指针) leetcode 142. Linked List Cycle II
  • 原文地址:https://www.cnblogs.com/yfann/p/4584717.html
Copyright © 2011-2022 走看看