AngularJs表单验证实例详解

前端之家收集整理的这篇文章主要介绍了AngularJs表单验证实例详解前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

常用的表单验证指令

1. 必填项验证

某个表单输入是否已填写,只要在输入字段元素上添加HTML5标记required即可:

代码如下:

2. 最小长度

验证表单输入的文本长度是否大于某个最小值,在输入字段上使用指令ng-minleng= "{number}":

代码如下:

3. 最大长度

验证表单输入的文本长度是否小于或等于某个最大值,在输入字段上使用指令ng-maxlength="{number}":

代码如下:

4. 模式匹配

使用ng-pattern="/PATTERN/"来确保输入能够匹配指定的正则表达式:

代码如下:

5. 电子邮件

验证输入内容是否是电子邮件,只要像下面这样将input的类型设置为email即可:

代码如下:

验证输入内容是否是数字,将input的类型设置为number:

代码如下:

7. URL

验证输入内容是否是URL,将input的类型设置为 url:

代码如下:

下面我们将这些表单验证放到具体的实现中来测试一下:

          
邮件           
          
          
2.最小长度=5:{{user.minlength}}
3.最大长度=20:{{user.maxlength}}
4.模式匹配:{{user.pattern}}
5.电子邮件:{{user.email}}
6.数字:{{user.age}}
7.URL:{{user.url}}

在测试中我们发现,只有当表达式满足验证,才会实时进行双向绑定。同时我们也发现,效果图如下:

似乎并没有发生什么问题,但是如果我们将其移植到一个队HTML5验证不怎么好的浏览器再来测试一下【本例IE9】,问题来了,某些字段完全没得验证

其实,上面的例子,我们利用了HTML5的验证与ng自有的验证进行了结合,不支持HTML5验证,但ng自由验证运行良好。解决方案很简单,可以使用模式匹配的方式解决这几种情况,也可以自定义验证指令来复写或者重定义验证规则。

屏蔽浏览器对表单的默认验证行为

在表单元素上添加novalidate标记即可,问题是我们怎么知道我们的表单有哪些字段是有效的,那些事非法或者无效的?ng对此也提供了非常棒的解决方案,表单的属性可以在其所属的$scope对象中访问到,而我们又可以访问$scope对象,因此JavaScript可以间接地访问DOM中的表单属性。借助这些属性,我们可以对表单做出实时响应。

可以使用formName.inputFieldName.property的格式访问这些属性

修改过的表单

布尔值属性,表示用户是否修改了表单。如果为ture,表示没有修改过;false表示修改过:

代码如下:
修改的表单

布尔型属性,当且仅当用户实际已经修改的表单。不管表单是否通过验证:

代码如下:

经过验证的表单

布尔型属性,它指示表单是否通过验证。如果表单当前通过验证,他将为true:

代码如下:
未通过验证的表单
代码如下:

最后两个属性在用于DOM元素的显示或隐藏时是特别有用的。同时,如果要设置特定的class时,他们也非常有用的。

错误

这是AngularJS提供的另外一个非常有用的属性:$error对象。它包含当前表单的所有验证内容,以及它们是否合法的信息。用下面的语法访问这个属性

代码如下:

如果验证失败,这个属性的值为true;如果值为false,说明输入字段的值通过了验证。

下面我们对这些验证指令进行测试:

Index@H_<a href="/tag/502/" target="_blank" class="keywords">502</a>_218@ <link href="~/Content/css/bootstrap.min.css" rel="stylesheet" /> <script src="~/Javascript/angular.min.js"> </script> <style type="text/css"> body { padding-top: 30px; } </style> </head> <body ng-Controller="MyController"> <div class="col-md-6"> <form role="form" name="myForm" ng-submit="submitForm(myForm.$valid)" class="form-horizontal" novalidate> <div class="form-group has-<a href="/tag/Feed/" target="_blank" class="keywords">Feed</a>back"> <div class="col-md-4"> <label for="name">1.必填项</label> </div> <div class="col-md-8"> <input class="form-control" id="name" name="name" type="text" required ng-model='user.name' /> <span class="glyphicon glyphicon-ok form-control-<a href="/tag/Feed/" target="_blank" class="keywords">Feed</a>back" ng-show="myForm.name.$dirty && myForm.name.$valid"></span> </div> </div> <div class="form-group has-<a href="/tag/Feed/" target="_blank" class="keywords">Feed</a>back"> <div class="col-md-4"> <label for="minlength">2.最小长度=5</label> </div> <div class="col-md-8"> <input type="text" id="minlength" name="minlength" ng-minlength="5" ng-model="user.minlength" class="form-control" /> <span class="glyphicon glyphicon-ok form-control-<a href="/tag/Feed/" target="_blank" class="keywords">Feed</a>back" ng-show="myForm.minlength.$dirty && myForm.minlength.$valid"></span> </div> </div> <div class="form-group has-<a href="/tag/Feed/" target="_blank" class="keywords">Feed</a>back"> <div class="col-md-4"> <label for="maxlength">3.最大长度=20</label> </div> <div class="col-md-8"> <input type="text" id="maxlength" name="maxlength" ng-model="user.maxlength" ng-maxlength="20" class="form-control" /> <span class="glyphicon glyphicon-ok form-control-<a href="/tag/Feed/" target="_blank" class="keywords">Feed</a>back" ng-show="myForm.maxlength.$dirty && myForm.maxlength.$valid"></span> </div> </div> <div class="form-group has-<a href="/tag/Feed/" target="_blank" class="keywords">Feed</a>back"> <div class="col-md-4"> <label for="pattern">4. 模式匹配</label> </div> <div class="col-md-8"> <input type="text" id="pattern" name="pattern" ng-model="user.pattern" ng-pattern="/^[a-zA-Z]*\d$/" class="form-control" /> <span class="glyphicon glyphicon-ok form-control-<a href="/tag/Feed/" target="_blank" class="keywords">Feed</a>back" ng-show="myForm.pattern.$dirty && myForm.pattern.$valid"></span> </div> </div> <div class="form-group has-<a href="/tag/Feed/" target="_blank" class="keywords">Feed</a>back"> <div class="col-md-4"> <label for="email">5. 电子<a href="/tag/youjian/" target="_blank" class="keywords">邮件</a></label> </div> <div class="col-md-8"> <input type="email" id="email" name="email" ng-model="user.email" class="form-control" /> <span class="glyphicon glyphicon-ok form-control-<a href="/tag/Feed/" target="_blank" class="keywords">Feed</a>back" ng-show="myForm.email.$dirty && myForm.email.$valid"></span> </div> </div> <div class="form-group has-<a href="/tag/Feed/" target="_blank" class="keywords">Feed</a>back"> <div class="col-md-4"> <label for="age">6. 数字</label> </div> <div class="col-md-8"> <input type="number" id="age" name="age" ng-model="user.age" class="form-control" /> <span class="glyphicon glyphicon-ok form-control-<a href="/tag/Feed/" target="_blank" class="keywords">Feed</a>back" ng-show="myForm.age.$dirty && myForm.age.$valid"></span> </div> </div> <div class="form-group has-<a href="/tag/Feed/" target="_blank" class="keywords">Feed</a>back"> <div class="col-md-4"> <label for="url"> 7. URL</label> </div> <div class="col-md-8"> <input type="url" id="url" name="url" ng-model="user.url" class="form-control" /> <span class="glyphicon glyphicon-ok form-control-<a href="/tag/Feed/" target="_blank" class="keywords">Feed</a>back" ng-show="myForm.url.$dirty && myForm.url.$valid"></span> </div> </div> <div class="form-group text-center"> <input class="btn btn-primary btn-lg" ng-disabled="myForm.$invalid" type="submit" value="提交" /> </div> </form> </div> <div class="col-md-12"> 1.必填项:{{user.name}} $pristine 【没<a href="/tag/xiugai/" target="_blank" class="keywords">修改</a>】:{{myForm.name.$pristine }} $dirty【<a href="/tag/xiugai/" target="_blank" class="keywords">修改</a>过】:{{myForm.name.$dirty}} $invalid【验证失败】:{{myForm.name.$invalid}} $invalid【验证成功】:{{myForm.name.$valid}} <a href="/tag/required/" target="_blank" class="keywords">required</a>:{{myForm.name.$error.<a href="/tag/required/" target="_blank" class="keywords">required</a>}} <br> 2.最小长度=5:{{user.minlength}} $pristine 【没<a href="/tag/xiugai/" target="_blank" class="keywords">修改</a>】:{{myForm.minlength.$pristine }} $dirty【<a href="/tag/xiugai/" target="_blank" class="keywords">修改</a>过】:{{myForm.minlength.$dirty}} $invalid【验证失败】:{{myForm.minlength.$invalid}} $invalid【验证成功】:{{myForm.minlength.$valid}} $error【<a href="/tag/cuowu/" target="_blank" class="keywords">错误</a>详情】:{{myForm.minlength.$error}}<br> 3.最大长度=20:{{user.maxlength}} $pristine 【没<a href="/tag/xiugai/" target="_blank" class="keywords">修改</a>】:{{myForm.maxlength.$pristine }} $dirty【<a href="/tag/xiugai/" target="_blank" class="keywords">修改</a>过】:{{myForm.maxlength.$dirty}} $invalid【验证失败】:{{myForm.maxlength.$invalid}} $invalid【验证成功】:{{myForm.maxlength.$valid}} $error【<a href="/tag/cuowu/" target="_blank" class="keywords">错误</a>详情】:{{myForm.maxlength.$error}}<br> 4.模式匹配:{{user.pattern}} $pristine 【没<a href="/tag/xiugai/" target="_blank" class="keywords">修改</a>】:{{myForm.pattern.$pristine }} $dirty【<a href="/tag/xiugai/" target="_blank" class="keywords">修改</a>过】:{{myForm.pattern.$dirty}} $invalid【验证失败】:{{myForm.pattern.$invalid}} $invalid【验证成功】:{{myForm.pattern.$valid}} $error【<a href="/tag/cuowu/" target="_blank" class="keywords">错误</a>详情】:{{myForm.pattern.$error}}<br> 5.电子<a href="/tag/youjian/" target="_blank" class="keywords">邮件</a>:{{user.email}} $pristine 【没<a href="/tag/xiugai/" target="_blank" class="keywords">修改</a>】:{{myForm.email.$pristine }} $dirty【<a href="/tag/xiugai/" target="_blank" class="keywords">修改</a>过】:{{myForm.email.$dirty}} $invalid【验证失败】:{{myForm.email.$invalid}} $invalid【验证成功】:{{myForm.email.$valid}} $error【<a href="/tag/cuowu/" target="_blank" class="keywords">错误</a>详情】:{{myForm.email.$error}}<br> 6.数字:{{user.age}} $pristine 【没<a href="/tag/xiugai/" target="_blank" class="keywords">修改</a>】:{{myForm.age.$pristine }} $dirty【<a href="/tag/xiugai/" target="_blank" class="keywords">修改</a>过】:{{myForm.age.$dirty}} $invalid【验证失败】:{{myForm.age.$invalid}} $invalid【验证成功】:{{myForm.age.$valid}} $error【<a href="/tag/cuowu/" target="_blank" class="keywords">错误</a>详情】:{{myForm.age.$error}}<br> 7.URL:{{user.url}} $pristine 【没<a href="/tag/xiugai/" target="_blank" class="keywords">修改</a>】:{{myForm.url.$pristine }} $dirty【<a href="/tag/xiugai/" target="_blank" class="keywords">修改</a>过】:{{myForm.url.$dirty}} $invalid【验证失败】:{{myForm.url.$invalid}} $invalid【验证成功】:{{myForm.url.$valid}} $error【<a href="/tag/cuowu/" target="_blank" class="keywords">错误</a>详情】:{{myForm.url.$error}}<br> </div> </body> </html> <script type="text/javascript"> angular.module('myTest',[]) .controller('myController',function($scope) { $scope.submitForm = function(isValid) { if (!isValid) { alert('验证失败'); } }; } ); </script></pre> </div> <p><a href="/tag/xiaoguo/" target="_blank" class="keywords">效果</a>如下:</p> <p style="text-align: center"><p class="pic_center"><img src="https://files.jb51.cc/file_images/article/201605/2016053010534521.gif" /></p></p> <p>同时,ng针对这几种验证指令,针对性的设置了一些css样式</p> <p>它们<a href="/tag/baokuo/" target="_blank" class="keywords">包括</a>:</p> <p><div class="codetitle"><span><a style="CURSOR: pointer" data="64168" class="copybut" id="copybut64168" onclick="doCopy('code64168')"><U></U></a> <a href="/tag/daima/" target="_blank" class="keywords">代码</a>如下:</div><div class="codebody" id="code64168">.ng-valid { }.ng-invalid { }.ng-pristine { }.ng-dirty { }/* really specific css rules applied by angular */.ng-invalid-<a href="/tag/required/" target="_blank" class="keywords">required</a> { }.ng-invalid-minlength { }.ng-valid-max-length { }</div></p> <p>它们对应着表单输入字段的特定状态。 </p> <p>例如当某个字段中的输入非法时,.ng-invlid类会被<a href="/tag/tianjia/" target="_blank" class="keywords">添加</a>到这个字段上。你可以编辑自己喜欢的CSS . 你可以私有定制化这些类来实现特定的场景应用.</p> <p>但是,默认的验证指令不一定能够,完全满足我们的真实应用场景,ng同样提供的<a href="/tag/zidingyi/" target="_blank" class="keywords">自定义</a>验证指令的<a href="/tag/gongneng/" target="_blank" class="keywords">功能</a>。</p> <p>首先我们来看一个简单的例子:</p> <div class="jb51code"> <pre class="brush:js;"> angular.module("myTest",[]) .directive('multipleEmail',[function () { return { require: "ngModel",link: function (scope,element,attr,ngModel) { if (ngModel) { var emailsRegexp = /^([a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9-]+(\.[a-z0-9-]+)*[;;]?)+$/i; } var customValidator = function (value) { var validity = ngModel.$isEmpty(value) || emailsRegexp.test(value); ngModel.$setValidity("multipleEmail",validity); return validity ? value : undefined; }; ngModel.$formatters.push(customValidator); ngModel.$parsers.push(customValidator); } }; }])</pre> </div> <p><a href="/tag/yemian/" target="_blank" class="keywords">页面</a>Html部分<a href="/tag/daima/" target="_blank" class="keywords">代码</a>如下:</p> <div class="jb51code"> <pre class="brush:js;"> <form class="form-horizontal" role="form" id="custom_form" name="custom_form" novalidate> <div class="form-group"> <label class="col-sm-2 control-label">多个email</label> <div class="col-sm-10"> <input multiple-email name="user_email" ng-model="user.email" required class="form-control" placeholder="自定义验证,多个邮箱地址,以“;”或者“;”分割" /> 验证通过:{{custom_form.user_email.$valid}} </div> </div> <div class="form-group text-center"> <input class="btn btn-primary btn-lg" ng-disabled="custom_form.$invalid" type="submit" value="提交" /> </div> </form></pre> </div> <p><a href="/tag/daima/" target="_blank" class="keywords">代码</a>非常的简单,实现的<a href="/tag/xiaoguo/" target="_blank" class="keywords">效果</a>如下所示:</p> <p style="text-align: center"><p class="pic_center"><img src="https://files.jb51.cc/file_images/article/201605/2016053010534522.gif" /></p></p> <p>这段<a href="/tag/daima/" target="_blank" class="keywords">代码</a>很简单,但是涉及到了ngModelController的几个重要的<a href="/tag/shuxing/" target="_blank" class="keywords">属性</a>$viewValue</p> <p>$viewValue<a href="/tag/shuxing/" target="_blank" class="keywords">属性</a>保存着更新视图所需的实际字符串。</p> <p><span style="color: #0000ff"><h3>$modelValue</h3></p> <p>$modelValue由数据模型持有。$modelValue和$viewValue可能是不同的,取决于$parser流水线是否对其进行了操作。</p> <p><span style="color: #0000ff"><h3>$parsers</h3></p> <p>$parsers的值是一个由<a href="/tag/hanshu/" target="_blank" class="keywords">函数</a>组成的数组,当<a href="/tag/yonghu/" target="_blank" class="keywords">用户</a>同控制器进行交互,并且ngModelController中的<em>$setViewValue()</em><a href="/tag/fangfa/" target="_blank" class="keywords">方法</a>被<a href="/tag/diaoyong/" target="_blank" class="keywords">调用</a>时,其中的<a href="/tag/hanshu/" target="_blank" class="keywords">函数</a>在当<a href="/tag/yonghu/" target="_blank" class="keywords">用户</a>同控制器进行交互,并且ngModelController中的$setViewValue()<a href="/tag/fangfa/" target="_blank" class="keywords">方法</a>被调会以流水线的形式被逐一<a href="/tag/diaoyong/" target="_blank" class="keywords">调用</a>。ngModel从DOM中读取的值会被<em>传入$parsers</em>中的<a href="/tag/hanshu/" target="_blank" class="keywords">函数</a>,并依次被其中的解析器处理。这是为了对值进行处理和修饰。</p> <p>备注:ngModel.$setViewValue()<a href="/tag/hanshu/" target="_blank" class="keywords">函数</a>用于设置作用域中的视图值。</p> <p>ngModel.$setViewValue()<a href="/tag/hanshu/" target="_blank" class="keywords">函数</a>可以接受一个参数。</p> <p>value(字符串):value参数是我们想要赋值给ngModel实例的实际值。</p> <p>这个<a href="/tag/fangfa/" target="_blank" class="keywords">方法</a>会更新控制器上本地的$viewValue,然后将值传递给每一个$parser<a href="/tag/hanshu/" target="_blank" class="keywords">函数</a>(<a href="/tag/baokuo/" target="_blank" class="keywords">包括</a>验证器)。当值被解析,且$parser流水线中所有的<a href="/tag/hanshu/" target="_blank" class="keywords">函数</a>都<a href="/tag/diaoyong/" target="_blank" class="keywords">调用</a>完成后,值会被赋给$modelValue<a href="/tag/shuxing/" target="_blank" class="keywords">属性</a>,并且传递给指令中ng-model<a href="/tag/shuxing/" target="_blank" class="keywords">属性</a>提供的表达式。最后,所有步骤都完成后,<em>$viewChangeListeners</em>中所有的监听器都会被<a href="/tag/diaoyong/" target="_blank" class="keywords">调用</a>。注意,单独<a href="/tag/diaoyong/" target="_blank" class="keywords">调用</a>$setViewValue()不会唤起一个新的digest循环,因此如果想更新指令,需要在设置$viewValue后手动触发digest。$setViewValue()<a href="/tag/fangfa/" target="_blank" class="keywords">方法</a>适合于在<a href="/tag/zidingyi/" target="_blank" class="keywords">自定义</a>指令中监听<a href="/tag/zidingyi/" target="_blank" class="keywords">自定义</a>事件(比如使用具有回调<a href="/tag/hanshu/" target="_blank" class="keywords">函数</a>的jQuery<a href="/tag/chajian/" target="_blank" class="keywords">插件</a>),我们会希望在回调时设置$viewValue并执行digest循环。</p> <p><span style="color: #0000ff"><h3>$formatters</h3></p> <p>$formatters的值是一个由<a href="/tag/hanshu/" target="_blank" class="keywords">函数</a>组成的数组,其中的<a href="/tag/hanshu/" target="_blank" class="keywords">函数</a>会以流水线的形式在数据模型的值发生变化时被逐一<a href="/tag/diaoyong/" target="_blank" class="keywords">调用</a>。它和$parser流水线互不影响,用来对值进行格式化和转换,以便在绑定了这个值的控件中<a href="/tag/xianshi/" target="_blank" class="keywords">显示</a>。</p> <p><span style="color: #0000ff"><h3>$viewChangeListeners</h3></p> <p>$viewChangeListeners的值是一个由<a href="/tag/hanshu/" target="_blank" class="keywords">函数</a>组成的数组,其中的<a href="/tag/hanshu/" target="_blank" class="keywords">函数</a>会以流水线的形式在视图中的值发生变化时被逐一<a href="/tag/diaoyong/" target="_blank" class="keywords">调用</a>。通过$viewChangeListeners,可以在无需使用$watch的情况下实现类似的行为。由于返回值会被忽略,因此这些<a href="/tag/hanshu/" target="_blank" class="keywords">函数</a>不需要返回值。</p> <p><span style="color: #0000ff"><h3>$error</h3></p> <p>$error对象中保存着没有通过验证的验证器<a href="/tag/mingcheng/" target="_blank" class="keywords">名称</a>以及对应的<a href="/tag/cuowu/" target="_blank" class="keywords">错误</a>信息。</p> <p><span style="color: #0000ff"><h3>$pristine</h3></p> <p>$pristine的值是布尔型的,可以告诉我们<a href="/tag/yonghu/" target="_blank" class="keywords">用户</a>是否对控件进行了<a href="/tag/xiugai/" target="_blank" class="keywords">修改</a>。</p> <p><span style="color: #0000ff"><h3>$dirty</h3></p> <p>$dirty的值和$pristine相反,可以告诉我们<a href="/tag/yonghu/" target="_blank" class="keywords">用户</a>是否和控件进行过交互。</p> <p><span style="color: #0000ff"><h3>$valid</h3></p> <p>$valid值可以告诉我们当前的控件中是否有<a href="/tag/cuowu/" target="_blank" class="keywords">错误</a>。当有<a href="/tag/cuowu/" target="_blank" class="keywords">错误</a>时值为false,没有<a href="/tag/cuowu/" target="_blank" class="keywords">错误</a>时值为true。</p> <p><span style="color: #0000ff"><h3>$invalid</h3></p> <p>$invalid值可以告诉我们当前控件中是否存在至少一个<a href="/tag/cuowu/" target="_blank" class="keywords">错误</a>,它的值和$valid相反。</p> <p>学习完基础的知识点,需要深入学习下<a href="/tag/zidingyi/" target="_blank" class="keywords">自定义</a>验证的写法,已经ng1.3之后对验证指令的易用性有所提高。</p> <p>以上所述是小编给大家介绍的用AngularJs验证表单实例详解,希望能够帮助到大家,后续还会持续给大家更新angularjs验证表单的相关知识,敬请关注编程之家网站!</p></div> <div class="topcard-tags"><a href="/tag/angularjsbiaodanyanzheng/" class="tag_link" target="_blank">angularjs表单验证</a></div> <ul class="list-group"> <li class="list-group-item"><a href="/js/48328.html" title="JS在onclientclick里如何控制onclick的执行">上一篇:JS在onclientclick里如何控制oncli</a><a href="/js/48319.html" title="AngularJs实现分页功能不带省略号的代码" class="text-muted pull-right">下一篇:AngularJs实现分页功能不带省略号的</a> </li> </ul> </div> </div> </div> <!-- row end --> <div class="row row-sm"> <div class="col-sm-12 col-md-12 col-lg-12"> <div class="card"> <ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-4605373693034661" data-ad-slot="9144498553"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script></div> </div> </div> <div class="row row-sm"> <div class="col-sm-12 col-md-12 col-lg-12"> <div class="card"> <div class="title"><h1>猜你在找的JavaScript相关文章</h1></div> <div class="list_con"> <a href="/js/997747.html" title="Javascript中的事件冒泡与捕获"><div class="title">Javascript中的事件冒泡与捕获</div> <div class="summary">事件冒泡和事件捕获 起因:今天在封装一个bind函数的时候,发现el.addEventListener函数支...</div> <time class="summary">作者:前端之家 时间:2021-02-22</time> </a> </div> <div class="list_con"> <a href="/js/997746.html" title="搞懂js中小数运算精度问题原因及解决办法"><img class="lazy" src="/images/np.jpg" data-original="/res/2021/02-22/19/e40e1eb184cb2a5d8c5f6c5e730d8e82.png" title="" width="160" height="90" style="float:right;margin-left:30px;display:none;" /><div class="title">搞懂js中小数运算精度问题原因及解决办法</div> <div class="summary">js小数运算会出现精度问题 js number类型 JS 数字类型只有number类型,number类型相当于其...</div> <time class="summary">作者:前端之家 时间:2021-02-22</time> </a> </div> <div class="list_con"> <a href="/js/997744.html" title="搞懂:前端跨域问题JS解决跨域问题VUE代理解决跨域问题原理"><div class="title">搞懂:前端跨域问题JS解决跨域问题VUE代理解决跨域问题原理</div> <div class="summary">什么是跨域 跨域 : 广义的跨域包含一下内容 : 1.资源跳转(链接跳转,重定向跳转,表单提...</div> <time class="summary">作者:前端之家 时间:2021-02-22</time> </a> </div> <div class="list_con"> <a href="/js/997743.html" title="前端对base64编码的理解,原生js实现字符base64编码"><div class="title">前端对base64编码的理解,原生js实现字符base64编码</div> <div class="summary">@ &quot;TOC&quot; 常见对base64的认知(不完全正确) 首先对base64常见的认知,也是...</div> <time class="summary">作者:前端之家 时间:2021-02-22</time> </a> </div> <div class="list_con"> <a href="/js/997742.html" title="搞懂:MVVM模型以及VUE中的数据绑定数据劫持发布订阅模式"><div class="title">搞懂:MVVM模型以及VUE中的数据绑定数据劫持发布订阅模式</div> <div class="summary">搞懂:MVVM模式和Vue中的MVVM模式 MVVM MVVM : 的缩写,说都能直接说出来 :模型, :视图...</div> <time class="summary">作者:前端之家 时间:2021-02-22</time> </a> </div> <div style="border-bottom: 1px solid #f4f4f4;margin-top:20px;"> <ins class="adsbygoogle" style="display:block" data-ad-format="fluid" data-ad-layout-key="-fr-2o+fp-dx-wx" data-ad-client="ca-pub-4605373693034661" data-ad-slot="4561116489"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div><div class="list_con"> <a href="/js/997318.html" title="js判断浏览器是否支持webGL"><div class="title">js判断浏览器是否支持webGL</div> <div class="summary">起因是我之前开发的网页,用到了three.js制作了一个3d的旋转球体效果。 在各种浏览器上运行...</div> <time class="summary">作者:前端之家 时间:2021-02-14</time> </a> </div> <div class="list_con"> <a href="/js/997317.html" title="js判断undefined和null"><div class="title">js判断undefined和null</div> <div class="summary">js判断undefined js判断null js判断null和undefined</div> <time class="summary">作者:前端之家 时间:2021-02-14</time> </a> </div> <div class="list_con"> <a href="/js/997316.html" title="将文字自动转为banner打印形式的工具"><div class="title">将文字自动转为banner打印形式的工具</div> <div class="summary">http://patorjk.com/software/taag/</div> <time class="summary">作者:前端之家 时间:2021-02-14</time> </a> </div> <div class="list_con"> <a href="/js/997315.html" title="聊一聊 bootstrap 的轮播图插件"><div class="title">聊一聊 bootstrap 的轮播图插件</div> <div class="summary">今天做工作的时候,轻车熟路的做完,又用到了bootstrap的轮播图,觉得有必要安利一下这个插...</div> <time class="summary">作者:前端之家 时间:2021-02-14</time> </a> </div> <div class="list_con"> <a href="/js/997314.html" title="js实现图片无缝循环跑马灯"><div class="title">js实现图片无缝循环跑马灯</div> <div class="summary">html 代码 css js代码 function mylsRunHorseLight() { if (mylsTimer != null) { clearIn...</div> <time class="summary">作者:前端之家 时间:2021-02-14</time> </a> </div> <div style="border-bottom: 1px solid #f4f4f4;margin-top:20px;"> <ins class="adsbygoogle" style="display:block" data-ad-format="fluid" data-ad-layout-key="-fr-2o+fp-dx-wx" data-ad-client="ca-pub-4605373693034661" data-ad-slot="4561116489"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div></div> </div> </div> </div> <!-- left end--> <!-- right --> <div class="col-sm-12 col-md-12 col-lg-3"> <!-- row --> <div class="row row-sm"> <div class="col-sm-12 col-md-12 col-lg-12"> <div class="card"> <label class="main-content-label ">编程分类</label> <div class="cate mt-20"><a href="/html/" title="HTML">HTML</a><a href="/html5/" title="HTML5">HTML5</a><a href="/js/" title="JavaScript">JavaScript</a><a href="/css/" title="CSS">CSS</a><a href="/jquery/" title="jQuery">jQuery</a><a href="/bootstrap/" title="Bootstrap">Bootstrap</a><a href="/angularjs/" title="Angularjs">Angularjs</a><a href="/typescript/" title="TypeScript">TypeScript</a><a href="/vue/" title="Vue">Vue</a><a href="/dojo/" title="Dojo">Dojo</a><a href="/json/" title="Json">Json</a><a href="/electron/" title="Electron">Electron</a><a href="/nodejs/" title="Node.js">Node.js</a><a href="/extjs/" title="extjs">extjs</a><a href="/express/" title="Express ">Express </a><a href="/xml/" title="XML">XML</a><a href="/es6/" title="ES6">ES6</a><a href="/ajax/" title="Ajax">Ajax</a><a href="/flash/" title="Flash">Flash</a><a href="/unity/" title="Unity">Unity</a><a href="/react/" title="React">React</a><a href="/flex/" title="Flex">Flex</a><a href="/antdesign/" title="Ant Design">Ant Design</a><a href="/webfrontend/" title="Web前端">Web前端</a><a href="/weapp/" title="微信小程序">微信小程序</a><a href="/wxmp/" title="微信公众号">微信公众号</a><div class="clearfix"></div> </div> </div> </div> </div> <!-- row end --> <!-- row --> <div class="row row-sm"> <div class="col-sm-12 col-md-12 col-lg-12"> <div class="card"> <!-- f2er-rightads --> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-4605373693034661" data-ad-slot="7756441254" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> </div> </div> <!-- row end --> <!-- row --> <div class="row row-sm"> <div class="col-sm-12 col-md-12 col-lg-12"> <div class="card"> <label class="main-content-label ">最新文章</label> <ul class="n-list"><li><a href="/js/997747.html" title="Javascript中的事件冒泡与捕获" target="_blank">• Javascript中的事件冒泡与</a></li> <li><a href="/js/997746.html" title="搞懂js中小数运算精度问题原因及解决办法" target="_blank">• 搞懂js中小数运算精度问题</a></li> <li><a href="/js/997744.html" title="搞懂:前端跨域问题JS解决跨域问题VUE代理解决跨域问题原理" target="_blank">• 搞懂:前端跨域问题JS解决</a></li> <li><a href="/js/997743.html" title="前端对base64编码的理解,原生js实现字符base64编码" target="_blank">• 前端对base64编码的理解,</a></li> <li><a href="/js/997742.html" title="搞懂:MVVM模型以及VUE中的数据绑定数据劫持发布订阅模式" target="_blank">• 搞懂:MVVM模型以及VUE中的</a></li> <li><a href="/js/997493.html" title="js实现横向跑马灯效果" target="_blank">• js实现横向跑马灯效果</a></li> <li><a href="/js/997318.html" title="js判断浏览器是否支持webGL" target="_blank">• js判断浏览器是否支持webG</a></li> <li><a href="/js/997317.html" title="js判断undefined和null" target="_blank">• js判断undefined和null</a></li> <li><a href="/js/997316.html" title="将文字自动转为banner打印形式的工具" target="_blank">• 将文字自动转为banner打印</a></li> <li><a href="/js/997315.html" title="聊一聊 bootstrap 的轮播图插件" target="_blank">• 聊一聊 bootstrap 的轮播图</a></li> </ul> </div> </div> </div> <!-- row end --> <!-- row --> <div class="row row-sm"> <div class="col-sm-12 col-md-12 col-lg-12"> <div class="card"> <label class="main-content-label ">热门标签 <span class="pull-right tx-12"> <a href="/all" target="_blank">更多 ►</a></span> </label> <div class="topcard-tags"><a href="/tag/guanbiyangao/" title="关闭广告" target="_blank">关闭广告</a><a href="/tag/danduheaders/" title="单独headers" target="_blank">单独headers</a><a href="/tag/fengzhuangdaima/" title="封装代码" target="_blank">封装代码</a><a href="/tag/tishicuowu/" title="提示错误" target="_blank">提示错误</a><a href="/tag/zhengshuzhengze/" title="整数正则" target="_blank">整数正则</a><a href="/tag/fei0kaitou/" title="非0开头" target="_blank">非0开头</a><a href="/tag/tiaoye/" title="跳页" target="_blank">跳页</a><a href="/tag/chuyema/" title="出页码" target="_blank">出页码</a><a href="/tag/antdtable/" title="antd table" target="_blank">antd table</a><a href="/tag/tishiURLweizhuce/" title="提示URL未注册" target="_blank">提示URL未注册</a><a href="/tag/gongzhonghaozhifu/" title="公众号支付" target="_blank">公众号支付</a><a href="/tag/vuehashmoshi/" title="vue hash模式" target="_blank">vue hash模式</a><a href="/tag/iSlider/" title="iSlider" target="_blank">iSlider</a><a href="/tag/chepaijianpan/" title="车牌键盘" target="_blank">车牌键盘</a><a href="/tag/xunhuantupian/" title="循环图片" target="_blank">循环图片</a><a href="/tag/echartsshuangzhexian/" title="echarts 双折线" target="_blank">echarts 双折</a><a href="/tag/zuoyoubuju/" title="左右布局" target="_blank">左右布局</a><a href="/tag/DllPlugin/" title="DllPlugin" target="_blank">DllPlugin</a><a href="/tag/duixiangchuangjian/" title="对象创建" target="_blank">对象创建</a><a href="/tag/daziyouxi/" title="打字游戏" target="_blank">打字游戏</a><a href="/tag/quanxuan/" title="圈选" target="_blank">圈选</a><a href="/tag/lianglan/" title="两栏" target="_blank">两栏</a><a href="/tag/yunhanshu/" title="云函数" target="_blank">云函数</a><a href="/tag/mengban/" title="蒙版" target="_blank">蒙版</a><a href="/tag/ES2020/" title="ES2020" target="_blank">ES2020</a><a href="/tag/chuchuang/" title="橱窗" target="_blank">橱窗</a><a href="/tag/wufenggundonglunbo/" title="无缝滚动轮播" target="_blank">无缝滚动轮播</a><a href="/tag/sekuaipengzhuang/" title="色块碰撞" target="_blank">色块碰撞</a><a href="/tag/zujianxiaohui/" title="组件销毁" target="_blank">组件销毁</a><a href="/tag/wendangcaozuo/" title="文档操作" target="_blank">文档操作</a></div> </div> </div> </div> <!-- row end --> <!-- row --> <div class="row row-sm"> <div class="col-sm-12 col-md-12 col-lg-12"> <div class="card"> <!-- f2er-rightads --> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-4605373693034661" data-ad-slot="7756441254" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> </div> </div> <!-- row end --> </div> <!-- right end --> </div> </div> <footer id="footer"> <div class="container"> <div class="row hidden-xs"> <dl class="col-sm-6 site-link"> <dt>最近更新</dt><dd><a href="/win11/1005328.html" title="小米手机重装系统价格多少?专业维修服务详解" target="_blank">· 小米手机重装系统价格多少?专业维修服务详解</a><span class="text-muted pull-right">02-05</span></dd> <dd><a href="/win11/1005327.html" title="手把手教你重装电脑系统,让你的电脑焕然一新!" target="_blank">· 手把手教你重装电脑系统,让你的电脑焕然一新!</a><span class="text-muted pull-right">02-05</span></dd> <dd><a href="/win11/1005326.html" title="教你一步步重装XP系统,让你的电脑重获新生" target="_blank">· 教你一步步重装XP系统,让你的电脑重获新生</a><span class="text-muted pull-right">02-05</span></dd> <dd><a href="/win11/1005325.html" title="从备份到上网:一步步教你重装电脑系统" target="_blank">· 从备份到上网:一步步教你重装电脑系统</a><span class="text-muted pull-right">02-05</span></dd> <dd><a href="/win11/1005324.html" title="Sony笔记本电脑一键重装系统详细图文教程" target="_blank">· Sony笔记本电脑一键重装系统详细图文教程</a><span class="text-muted pull-right">02-05</span></dd> <dd><a href="/win11/1005323.html" title="Lenovo笔记本重装系统超详细教程,小白也能轻松上手" target="_blank">· Lenovo笔记本重装系统超详细教程,小白也能轻松...</a><span class="text-muted pull-right">02-05</span></dd> <dd><a href="/win11/1005322.html" title="联想笔记本一键重装Win10系统详细教程" target="_blank">· 联想笔记本一键重装Win10系统详细教程</a><span class="text-muted pull-right">02-05</span></dd> <dd><a href="/win11/1005321.html" title="电脑系统故障无需愁,专业维修店帮你重装旧貌换新颜" target="_blank">· 电脑系统故障无需愁,专业维修店帮你重装旧貌换新...</a><span class="text-muted pull-right">02-05</span></dd> <dd><a href="/win11/1005320.html" title="联想笔记本一键重装Win10系统图文教程,小白也能轻松搞定!" target="_blank">· 联想笔记本一键重装Win10系统图文教程,小白也能...</a><span class="text-muted pull-right">02-05</span></dd> <dd><a href="/win11/1005319.html" title="笔记本重装系统图文教程:从光盘启动一步到位" target="_blank">· 笔记本重装系统图文教程:从光盘启动一步到位</a><span class="text-muted pull-right">02-05</span></dd> </dl> <dl class="col-sm-4 site-link"> <dt>好站推荐</dt><dd> <a href="https://www.runoob.com" title="菜鸟教程(www.runoob.com)提供了编程的基础技术教程, 介绍了HTML、CSS、Javascript、Python,Java,Ruby,C,PHP , MySQL等各种编程语言的基础知识。 同时本站中也提供了大量的在线实例,通过实例,您可以更好的学习编程。" target="_blank">菜鸟教程</a></dd><dd> <a href="https://www.jb51.cc" title="编程之家(www.jb51.cc)是成立于2017年面向全球中文开发者的技术内容分享平台。提供编程导航、编程问答、编程博文、编程百科、编程教程、编程工具、编程实例等开发者最需要的编程技术内容与开发工具支持,与你一起学习编程,相信编程改变未来!" target="_blank">编程之家</a></dd><dd> <a href="" title="前端之家 f2er.com 前端开发人员所需学习知识手册。" target="_blank">前端之家</a></dd></dl> <dl class="col-sm-2 site-link"> <dt>商务合作</dt> <dd><a target="_blank" href="http://wpa.qq.com/msgrd?v=3&uin=76874919&site=qq&menu=yes">联系我们</a></dd> </dl> </div> <div class="copyright"> Copyright © 2019 前端之家. 当前版本 V7.0.16<br> <span class="ml5">前端之家 版权所有 <a href="https://beian.miit.gov.cn/" target="_blank" rel="nofollow">闽ICP备13020303号-10</a></span> </div> </div> </footer> <script type="text/javascript" src="/js/base.js"></script> </body> </html>