码迷,mamicode.com
首页 > 其他好文 > 详细

依赖内置ng-model指令的自定义指令

时间:2015-07-09 14:47:00      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:自定义   指令   require   ng-model   

  ng-model是AngularJS的原生指令,通过require: ‘ngModel‘可以更加深入地处理数据的双向数据绑定。

  ng-model里面的属性有:

  $parsers:保存了从viewValue到modelValue绑定过程中的处理函数。

  $formatters:保存了从modelValue到viewValue绑定过程中的处理函数。

  $setViewValue:当AngularJS外部发生某件事情的时候,需要调用这个函数才能让AngularJS知道应该更新modelValue了。

  $render:设定当model发生变化时该如何去更新view。

  $setValidity:设置验证结果。

  $viewValue:视图里的值。

  $modelValue:模型里的值。


$parsers、$formatters和$setValidity的例子:

<!DOCTYPE html>
<html ng-app="myModule">

<head>
    <meta charset="utf-8">
</head>

<body>
    <article ng-controller="myController">
        <form name="myForm">
            <input type="text" name="evenInput" ng-model="data.even" even>
            <input type="text" ng-model="data.even" even>
            <section ng-show="myForm.evenInput.$error.even">
                只能为偶数
            </section>
        </form>
    </article>
    <script src="../JS/angular.min.js"></script>
    <script type="text/javascript">
    angular.module(‘myModule‘, [])
        .controller(‘myController‘, function() {

        })
        .directive(‘even‘, function() {
            return {
                require: ‘ngModel‘,
                link: function($scope, iElm, iAttrs, ngModelController) {
                    ngModelController.$parsers.push(function(viewValue) { //parser-语法分析器
                        if (viewValue % 2 === 0) {
                            ngModelController.$setValidity(‘even‘, true); //.$error.even为false
                        } else {
                            ngModelController.$setValidity(‘even‘, false); //.$error.even为true
                        }
                        return viewValue;
                    });
                    ngModelController.$formatters.push(function(modelValue) {
                        if (modelValue !== undefined) {
                            modelValue = modelValue + ‘ some words‘;
                        }
                        return modelValue;
                    });
                }
            };
        });
    </script>
</body>

</html>


$setViewValue、$render和$viewValue的例子:

<!DOCTYPE html>
<html ng-app="myModule">

<head>
    <meta charset="utf-8">
</head>

<body>
    <article ng-controller="myController">
        <my-content ng-model="someText"></my-content>
        <my-content ng-model="someText"></my-content>
    </article>
    <script src="../JS/angular.min.js"></script>
    <script type="text/javascript">
    angular.module(‘myModule‘, [])
        .controller(‘myController‘, function() {

        })
        .directive(‘myContent‘, function() {
            return {
                restrict: ‘E‘,
                template: ‘<div contenteditable="true"></div>‘,
                require: ‘ngModel‘,
                replace: true,
                link: function($scope, iElm, iAttrs, ngModelController) {
                    iElm.on(‘keyup‘, function() {
                        $scope.$apply(function() {
                            ngModelController.$setViewValue(iElm.html());
                        });
                    });
                    ngModelController.$render = function() {
                        iElm.html(ngModelController.$viewValue);
                    }
                }
            };
        });
    </script>
</body>

</html>


依赖内置ng-model指令的自定义指令

标签:自定义   指令   require   ng-model   

原文地址:http://iampomelo.blog.51cto.com/10193513/1672508

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!