angularjs中类似textarea的换行、空格处理
背景
今天测试人员测试出来一个显示数据的页面,没有换行。
原因剖析
这个页面是从一个<textarea>的页面拿到的数据,存到数据库中后再返回来的。
1.
知道这点之后,就有了调查方向了:先查看从数据库取出来的数据是否有换行的标识,经过调试发现确实有(chrome换行符显示的是一个回车键的图标)
2.
既然有换行符,那么就是存取数据都是原模原样的,那么在显示的时候除了问题,那么是不是<span>的问题,经过一番调查,span确实不能直接处理换行符,需要替换为<br />,这个是html换行标记了
于是使用正则替换str.replace(/\n/g,"<br />"),结果把要显示的内容的换行符替换为了<br />,但是还是直接显示了出来,并没有达到换行的目的,这个时候自己都怀疑是不是<span>不支持<br />,于是用了<div>替换了<span>标记,一样的没有换行。
3.
这个时候,基本上猜测就是angularjs转义了,之后又查了资料,发现<pre>标记可以使用,这个标记的描述是对原有内容原模原样的显示出来,也就是说<pre>可以直接的显示<textarea>的原始值,事实证明就是这样子的,但是它出现了一个黑灰色的背景框,这个可不是我想要的。
4.
既然是angularjs转义的,那么肯定有原始的解决方案,真让自己找到了,就是使用ng-bind-html指令,可是这个页面直接提示这个是一个不安全的操作,都提供了这个指令了,还提示安全问题,那么肯定有对策,果然让自己找到了,必须配合$sce服务使用
最终解决方案
使用
<pre>直接显示值,就是有背景。<pre>{{data}}</pre>在页面中使用ng-bind-html指令配合$sce
//js
app.filter('trustHtml',function($sce){
return function(input){
return $sce.trustAsHtml(input.replace(/ /g,' ').replace(/\n/g,'<br />'));
};
});
//html
<span ng-bind-html="data | trustHtml"><span>
回顾
自己出错的地方
<span>标记不支持<br />- 先处理的
<br />的标记,之后才处理了空格
没有考虑的地方
- 空格的处理没有考虑到
- 先处理空格和转义字符的结果是不同的。
知识点
- angularjs把赋值都进行了转义
<testarea>直接支持换行<pre>标记也支持换行<textarea>的换行符是\n- angularjs使用
ng-bind-html指令显示html的值 - html的直接支持是危险的,所以要使用
$sce.trustAsHtml方法进行手动信任一次。 /\n/只能替换第一个换行符,//g是替换所有的(g代表global)。- angularjs的filter是返回一个函数,且第一个参数是输入的值
扩展
- 注意转义的问题。
- 注意一些标签是支持换行、空格的。
$sce.trustAsHtml处理html,因为看到了As,那么也就支持其他的AsXXX方法了,有哪些?- filter的4中用法:
{{data | filter1}},ng-bind-html="data | fitler1",fitler1(data),$filter('fitler1')(data) - filter的多个参数的形式是一样的。
- linux 管道
|符号的概念:把前面的结果当做后面的输入的参数
angularjs中类似textarea的换行、空格处理的更多相关文章
- 在使用easyui,datagrid时,JSON中的如果含有换行符,则不能显示数据
http://www.xuebuyuan.com/2103538.html 每项值需处理换行符 item = item.Replace("\r\n", ""); ...
- AngularJS 中的Promise --- $q服务详解
先说说什么是Promise,什么是$q吧.Promise是一种异步处理模式,有很多的实现方式,比如著名的Kris Kwal's Q还有JQuery的Deffered. 什么是Promise 以前了解过 ...
- AngularJS中的表单验证
AngularJS中的表单验证 AngularJS自带了很多验证,什么必填,最大长度,最小长度...,这里记录几个有用的正则式验证 1.使用angularjs的表单验证 正则式验证 只需要配置一个正则 ...
- 关于angularjs中的jQuery
关于angularjs中的jQuery 下面是一个小例子,用来说明我经常看到的一种模式.我们需要一个开关型的按钮.(注意:这个例子的代码有点装逼,并且有点冗长,只是为了用来代表更加复杂一些的例子,这些 ...
- AngularJS中的指令全面解析(转载)
说到AngularJS,我们首先想到的大概也就是双向数据绑定和指令系统了,这两者也是AngularJS中最为吸引人的地方.双向数据绑定呢,感觉没什么好说的,那么今天我们就来简单的讨论下AngularJ ...
- 在Visual Studio中使用正则表达式匹配换行和批量替换
系统环境:Windows 8.1 Enterprise Update 2 x64 开发环境:Mircosoft Visual Studio Ultimate 2013 Update 2 RC 问题:如 ...
- AngularJS中实现无限级联动菜单(使用demo)
昨天没来得及贴几个使用demo,今天补上,供有兴趣的同学参考 :) 1. 同步加载子选项demo2. 异步加载子选项demo3. 初始值回填demo4. 倒金字塔依赖demo directive的源代 ...
- 关于input/textarea提交内容空格回车转换问题,以及ng-model去除空格问题
input/textarea提交内容空格回车转换问题 /*my-enter-bind.js*/ /*回车换行显示转义*/ 'use strict'; angular.module('app') .di ...
- AngularJS学习--- AngularJS中XHR(AJAX)和依赖注入(DI) step5
前言:本文接前一篇文章,主要介绍什么是XHR,AJAX,DI,angularjs中如何使用XHR和DI. 1.切换工具目录 git checkout -f step- #切换分支 npm start ...
随机推荐
- Android 社区App 《窝吧》开源分享
一整个社区模式App的整套代码,包括发布动态,添加.删除好友,添加黑名单,聊天,用户反馈等功能. 相关技术 1 底层使用Bmob后端云,官网: https://www.bmob.cn/ 2 友盟插件, ...
- jquery ui-----弹出窗口 dialog
jquery ui 提供了强大的dialog功能,基本能满足开发的功能. 先上一个简单的例子: [代码] <script> $(function() { $( "#dialo ...
- 一篇文章帮你解决python的包管理
写python代码的人都知道,一个项目写下下来,不可避免的都需要使用很多第三方包,通常我们都是通过pip install ,然而当我们需要上线的时候问题来了,如果中间你自己不记得自己安装了多少个包,这 ...
- PostgreSQL9.6.2的WINDOWS下安装
下载链接:https://www.enterprisedb.com/downloads/postgres-postgresql-downloads#windows 安装链接:http://www.cn ...
- vue中什么样的数据可以是在视图中显示
1. Vue中不可以添加不存在的属性,因为不存在的属性是没有getter和setter的. <div id="app"> {{msg.a}} {{msg.b}} < ...
- set类型
set 集合 是string类型的无序集合.我们可以对集合去交集 并集 差集 sadd 添加元素 不允许有重复的值 smembers 查看元素中的值 srem 删除set中的值
- 2017-07-07(zip unzip gzip gunzip)
zip压缩格式 zip zip 压缩文件名 源文件 (压缩文件) zip -r 压缩文件名 源文件 (压缩目录) unzip unzip 压缩名 .gz压缩格式 gzip gz ...
- 006-接收键盘的输入(read)
read -ptns 变量名 -p 在等待read输入的时候,显示的提示信息 -t 秒数,read等待用户输入的时间 -n read接收用户输入的字符数,只接收指定字符数,就会执行 -s 隐藏输 ...
- scss 初学笔记 二 混合宏
混合宏 格式 @mixin 定义混合宏 (相当于变量声明 var $ ?) //不带参数混合宏 @mixin borderRadius{ -webkit-border-radius: 5px; b ...
- Azure Automation Deploy (ARM)
以下说明仅是对虚拟机定时开关机的一个Demo,如果读者的定时任务比较复杂,需要通过修改Runbook脚本文件实现对应的功能. 1.创建automation账户 2.添加凭据 3.添加一个runbook ...