IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    关于angularJs 遇到的一个小坑

    canoe发表于 2017-03-10 16:16:59
    love 0

    最近做一个项目,应该来说比较简单的输入框验证ip地址而已,允许空值

    clipboard.png

    首先是对ip地址进行检验匹配是否正确,开始我在指令中是这样写的。我输入空格后会提示输入有误,可是这就有一个问题了,我在输入框中删除空格后提示并不会消失,我就想应该先判断dns是否输入空格,可是各种姿势过后我发现没有办法区分是否输入空格。

        /**
         * 检验ip
         */
        jbconsole.directive('checkIp', [function () {
            return {
                require: "ngModel",
                link: function (scope, element, attr, ngModel) {
                    if (ngModel) {
                        var ipRegexp = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;
                    }
                    var customValidator = function (value) {
                        if (/^\s+$/.test(value)) {
                            var validity = ipRegexp.test(value);
                        } else {
                             validity = ngModel.$isEmpty(value)
                        }
                        console.log(validity)
                        ngModel.$setValidity("checkIp", validity);
    
                        return validity ? value : undefined;
                    };
                    ngModel.$formatters.push(customValidator);
                    ngModel.$parsers.push(customValidator);
                }
            }
        }])

    jade中

    input.form-control(type='text' 
                        name='dns' ng-model='appForm.dns' 
                        placeholder='255.255.255.255' 
                        check-ip)
    .text-fail(ng-if='appNewForm.dns.$invalid' ) 输入有误

    然后我想是不是angular的ng-model 对空格进行了处理,遂在本地进行了一个测试,监听ipt的值变化,发现空字符和有空格的字符串是有区别的,果然是ng-model对字符串进行了trim()操作

    <!DOCTYPE html>
    <html>
    <head>
        <title></title>
    </head>
    <body>
        <input type="text" name="item" id='ipt' oninput="OnInput (event)" onpropertychange="OnPropChanged (event)" focused>
        <div id='iptLength'></div>
    
    </body>
    <script type="text/javascript">
        var ipt=document.getElementById('ipt')
        var iptLength=document.getElementById('iptLength');
        var value=ipt.value;
        iptLength.innerHTML='当前字符串为'+value.length
        function OnInput (event) {
             value=ipt.value;
            iptLength.innerHTML='当前字符串为'+value.length
    
           }
    
    </script>
    </html>

    接下来,通过google,发现需要加上ng-trim="false"这个指令就可以了,看来google才是程序员真爱

    这个问题虽然是一个小问题,是我对angular学习的不够深刻,记录下来万一大家和我遇到了同样的困扰了呢



沪ICP备19023445号-2号
友情链接