当前位置:首页 > 日记 > 正文

Angular.js中下拉框实现渲染html的方法

Angular.js中下拉框实现渲染html的方法

前言

大家都知道angualrjs处于安全的考虑,插值 指令会对相应字符串进行过滤,避免出现html攻击。但是在一些时候,我们需要渲染html,比如实现一个分级的下拉框

代码如下:

<body ng-app="app" ng-controller="controller"><select ng-model="value" ng-options="t.text for t in testList"></select><script src="/bootstrap/bootstrap/dist/angular-bootstrap/angular.js"></script><script type="text/javascript"> var app= angular.module("app",[]); app.controller("controller",["$scope",function ($scope) {  var testList=[{id:0,text:"  全国"},{id:1,text:" 北京"},{id:20,text:"   上海"},{id:3,text:"  福建"},{id:4,text:"  山东"}];  $scope.value=20;  $scope.testList=testList; }]);</script></body>

可以看到,空格直接被渲染为  。一个简单粗暴的解决办法是修改angularjs源代码,不再对html进行过滤,在angularjs源码中搜索updateOptions函数,直接对相应脚本进行替换,如下图:

                 

可以看到,空格已经被正确的渲染,这种方式虽然简单,但是修改将会影响到所有的下拉框控件,有可能会受到html攻击,一种比较中规中矩的办法是采用ng-bind-html来渲染html,这个时候下拉框绑定数据的方式也需要改变,相应代码如下:

<body ng-app="app" ng-controller="controller"><select ng-module="value" > <option ng-repeat="data in testList" value="{{data.id}}" ng-selected="data.id==value" ng-bind-html="data.text"> </option></select><script src="/bootstrap/bootstrap/dist/angular-bootstrap/angular.js"></script><script type="text/javascript"> var app= angular.module("app",[]); app.controller("controller",["$scope","$sce",function ($scope,$sce) {  var testList=[{id:0,text:"  全国"},{id:1,text:" 北京"},{id:20,text:"   上海"},{id:3,text:"  福建"},{id:4,text:"  山东"}];  for(var i=0;i<testList.length;i++)  {   testList[i].text=$sce.trustAsHtml( testList[i].text);  }  $scope.value='20';//注意,此处必须为字符串类型,否则无法获取选中的值  $scope.testList=testList;  }]);</script></body>

这种方式非常消耗性能,对于数据量不大的下拉框,这种方式完全可以满足需要,但是如果数据量稍微大些,浏览器就会出现明显的卡顿现象,这个时候可以自己写一个指令来实现下拉框,代码如下:

<body ng-app="app" ng-controller="controller"><drop-down-list d-list="testList" value="id" text="text" d-select-value="value" ></drop-down-list>{{value}}<script src="/bootstrap/bootstrap/dist/angular-bootstrap/angular.js"></script><script type="text/javascript"> var app= angular.module("app",[]); app.controller("controller",["$scope","$window",function ($scope,$window) {  var testList=[{id:0,text:"  全国"},{id:1,text:" 北京"},{id:20,text:"   上海"},{id:3,text:"  福建"},{id:4,text:"  山东"}];  $scope.value=20;  $scope.testList=testList; }]); app.directive("dropDownList",function () {  return{   restrict:'E',   scope :{    dList:'=',    dSelectValue:'='   } ,   link:function(scope, element, attrs) {    var d=document;    var value=attrs["value"];//对应option的value    var text=attrs["text"];    var selectValue=scope.dSelectValue;    element.on("change",function(){     var selectedIndex=this.selectedIndex;     scope.$apply(function(){      scope.dSelectValue=selectedIndex;     });    })    for(var i=0;i<scope.dList.length;i++)    {     var option=d.createElement("option");     option.value=scope.dList[i][value];     option.innerHTML=scope.dList[i][text];     if(selectValue==option.value)     {      option.setAttribute("selected",true);     }     element.append(option);    }   },   template:'<select></select>',   replace:true  }; });</script></body>

这种方式可以比较完美的实现相应功能,是一种较好的选择。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。

相关文章

微信小程序实现tab切换效果

微信小程序实现tab切换效果

效果,程序,电脑软件,微信小,tab,微信小程序之tab切换效果,如图:最近在学习微信小程序并把之前的公司app搬到小程序上,挑一些实现效果记录一下(主要是官方文档里没说的,毕竟官方文档只是介绍功能).wxml代码:<view class="body"> <view class="na…

如何将ps软件进行汉化

如何将ps软件进行汉化

方法,汉化,如何将,电脑软件,ps,  ps软件相信你很多同学都知道还有别的语言版本,如果下载的不是汉语可以进行汉化的。但是很多同学还不太清楚。那么接下来下面是小编整理的一些关于如何将ps软件进行汉化,供您参阅。将ps软件进行汉化的方法首…

PS制作唯美炫光金粉效果的圣诞文字

PS制作唯美炫光金粉效果的圣诞文字

教程,文字,金粉,圣诞,唯美,的文字特效学习者和未来的设计师们,大家好。下面的教程主要是教大家使用Photoshop来制作一个非常炫的金粉效果的圣诞文字。这样的金粉效果挺漂亮的,大家也可以把它运用到夜店的海报设计,或者电商设计当中。缺点是这…

powerpoint中柱状图怎么做

powerpoint中柱状图怎么做

柱状图,方法,怎么做,中做,电脑软件,  ppt中经常用到图表,比如柱形图、圆饼图等,这些图就是基于一定的数据建立起来的,所以我们得先建立数据表格然后才能生成图表,那么ppt中怎么做柱状图?下面给大家分享吧。在ppt中做柱状图的方法1. 打开excel…

30款最新的2018新年宣传单/海报/贺

30款最新的2018新年宣传单/海报/贺

宣传单,海报,新年,最新,电脑软件,接下来请的各位朋友欣赏30款最新的2018新年宣传单/海报/贺卡设计,包括新年快乐宣传单、新年庆祝宣传单、新年销售宣传单、新年庆祝啤酒聚会宣传单、新年倒计时宣传单、新年销售宣传单及新年聚会庆祝海报、除…

js实现移动端导航点击自动滑动效果

js实现移动端导航点击自动滑动效果

移动端,滑动效果,导航,电脑软件,js,本文实例为大家分享了js实现移动端导航点击滑动效果的具体代码,供大家参考,具体内容如下移动端模拟导航可点击自动滑动 0.1.4。导航可左右滑动,可点击边缘的一个,自动滚动下一个到可视范围【依赖于iscroll.js…

基于ASP.NET Core数据保护生成验证

基于ASP.NET Core数据保护生成验证

验证,数据保护,示例,电脑软件,NET,ASP.NET Core Data Protection 不仅提供了非对称加密能力,而且提供了灵活的秘钥存储方式以及一致的加解密接口(Protect与Unprotect)。Session中用到了它,Cookie验证中用到了它,OpenIdConnect中也用到了它。。。…

软件测试面试如何测试一个杯子

软件测试面试如何测试一个杯子

软件测试,杯子,测试,电脑软件,软件测试面试如何测试一个杯子在软件测试的面试中, 经常会碰到类似的问题。 比如:如何测试一个杯子, 或者如何测试一只笔。 要求你设计20个以上的test case.这类的面试题目,是考察面试者是否熟悉各种软件测试方法, …

WPS演示如何让旋转WPS演示设置旋转

WPS演示如何让旋转WPS演示设置旋转

设置,方法,图片旋转,图形,动画效果,  相信大家都知道幻灯片可以制作成动画一样灵活,比如将一个图片进行旋转变成动画,可是不知道怎么进行操作。以下是小编给大家整理的WPS演示设置图片旋转的方法,希望能帮到你!WPS演示设置图片旋转的具体步…

chorme 浏览器记住密码后input黄色

chorme 浏览器记住密码后input黄色

处理方法,浏览器,记住密码,两种,黄色,使用chrome浏览器选择记住密码的账号,输入框会自动加上黄色的背景,有些设计输入框是透明背景的,需要去除掉这个黄色的背景;方法1:阴影覆盖input:-webkit-autofill { -webkit-box-shadow: 0 0 0 1000px whit…

Photoshop只需几步画出箭头

Photoshop只需几步画出箭头

只需,箭头,几步,画出,电脑软件,Photoshop作为一个强大的修图软件,其功能也是极其强大,需要花很多时间、精力去摸索、学习,我们往往会在很多图中看到箭头指示的图标,那么,用Photoshop该如何画箭头呢,下面由我来教你。步骤:1、首先打开Photoshop软件…

excel2007 打印时添加页码的教程ex

excel2007 打印时添加页码的教程ex

教程,页码,电脑软件,strong,  在Excel中录入好数据的时候经常需要把数据连同页码打印出来,或许很多朋友都不知道该如何打印添加页码,其实很简单,只需要在打印前添加页码就可以了。接下来是小编为大家带来的excel2007 打印时添加页码的教程,供…