AngularJs之ngModel中$parsers和$formatters随笔

本文并非完全讲解$parsers$formatters的基础知识的内容,你还要掌握有关指令的相关知识,以便于你理解下面的内容。
$parsers由input的值,即用户输入的变化都会触发其中的管道函数。它是view值到model值的转换器。model值对应的管道函数中的return值决定。
$formatters则和$parsers的作用相反,它是model值到view值的转化器。其view值由对应的管道函数中的return值决定。并且要注意的一点是,在view中引起的model值的变化并不能触发$formatters中的管道函数,只有在代码中改变model的值才会触发其管道函数。

下面的这段代码,展示的是用户输入触发$parsers中的管道函数,引起model值的变化。和从代码中改变model的值,触发$formatters的管道函数,从而引起view值的变化。

<!DOCTYPE html>
<html lang="en" ng-app="app">
<head>
    <meta charset="UTF-8">
    <title>parser_uppercase</title>
    <script type="text/javascript" src="../js/angular.min.js"></script>
    <script type="text/javascript">
        var app = angular.module('app',[]);
        app.controller('MyCtrl', function($scope){
            $scope.name = 'kobe';
            $scope.changeName = function(){
                $scope.name = $scope.newName;
            }
        });
        app.directive('myTag', function(){
            return {
                restrict: 'A',
                require: 'ngModel',
                link: function(scope, ele, attrs, ctrl){
                    ctrl.$parsers.push(function(value){
                        value = value.toUpperCase();
                        return value;
                    });
                    ctrl.$formatters.push(function(value){
                        console.log('$formatters方法被调用');
                        value = value.toUpperCase();
                        return value;
                    });
                }
            }
        })
    </script>
</head>
<body ng-controller="MyCtrl">
    <input type="text" my-tag ng-model="name"/>
    <Strong>ModelValue:{{name}}</Strong>
    <input type="text" ng-model="newName"/>
    <button ng-click="changeName()">ChangeName</button>
</body>
</html>
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值