背景

今天测试人员测试出来一个显示数据的页面,没有换行。

原因剖析

这个页面是从一个<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服务使用

最终解决方案

  1. 使用<pre>直接显示值,就是有背景。

    <pre>{{data}}</pre>
  2. 在页面中使用ng-bind-html指令配合$sce

    //js
    app.filter('trustHtml',function($sce){
    return function(input){
    return $sce.trustAsHtml(input.replace(/ /g,'&nbsp;').replace(/\n/g,'<br />'));
    };
    });
    //html
    <span ng-bind-html="data | trustHtml"><span>

回顾

自己出错的地方

  1. <span>标记不支持<br />
  2. 先处理的<br />的标记,之后才处理了空格

没有考虑的地方

  1. 空格的处理没有考虑到
  2. 先处理空格和转义字符的结果是不同的。

知识点

  1. angularjs把赋值都进行了转义
  2. <testarea>直接支持换行
  3. <pre>标记也支持换行
  4. <textarea>的换行符是\n
  5. angularjs使用ng-bind-html指令显示html的值
  6. html的直接支持是危险的,所以要使用$sce.trustAsHtml方法进行手动信任一次。
  7. /\n/只能替换第一个换行符,//g是替换所有的(g代表global)。
  8. angularjs的filter是返回一个函数,且第一个参数是输入的值

扩展

  1. 注意转义的问题。
  2. 注意一些标签是支持换行、空格的。
  3. $sce.trustAsHtml处理html,因为看到了As,那么也就支持其他的AsXXX方法了,有哪些?
  4. filter的4中用法:{{data | filter1}},ng-bind-html="data | fitler1",fitler1(data),$filter('fitler1')(data)
  5. filter的多个参数的形式是一样的。
  6. linux 管道 |符号的概念:把前面的结果当做后面的输入的参数

angularjs中类似textarea的换行、空格处理的更多相关文章

  1. 在使用easyui,datagrid时,JSON中的如果含有换行符,则不能显示数据

    http://www.xuebuyuan.com/2103538.html 每项值需处理换行符 item = item.Replace("\r\n", ""); ...

  2. AngularJS 中的Promise --- $q服务详解

    先说说什么是Promise,什么是$q吧.Promise是一种异步处理模式,有很多的实现方式,比如著名的Kris Kwal's Q还有JQuery的Deffered. 什么是Promise 以前了解过 ...

  3. AngularJS中的表单验证

    AngularJS中的表单验证 AngularJS自带了很多验证,什么必填,最大长度,最小长度...,这里记录几个有用的正则式验证 1.使用angularjs的表单验证 正则式验证 只需要配置一个正则 ...

  4. 关于angularjs中的jQuery

    关于angularjs中的jQuery 下面是一个小例子,用来说明我经常看到的一种模式.我们需要一个开关型的按钮.(注意:这个例子的代码有点装逼,并且有点冗长,只是为了用来代表更加复杂一些的例子,这些 ...

  5. AngularJS中的指令全面解析(转载)

    说到AngularJS,我们首先想到的大概也就是双向数据绑定和指令系统了,这两者也是AngularJS中最为吸引人的地方.双向数据绑定呢,感觉没什么好说的,那么今天我们就来简单的讨论下AngularJ ...

  6. 在Visual Studio中使用正则表达式匹配换行和批量替换

    系统环境:Windows 8.1 Enterprise Update 2 x64 开发环境:Mircosoft Visual Studio Ultimate 2013 Update 2 RC 问题:如 ...

  7. AngularJS中实现无限级联动菜单(使用demo)

    昨天没来得及贴几个使用demo,今天补上,供有兴趣的同学参考 :) 1. 同步加载子选项demo2. 异步加载子选项demo3. 初始值回填demo4. 倒金字塔依赖demo directive的源代 ...

  8. 关于input/textarea提交内容空格回车转换问题,以及ng-model去除空格问题

    input/textarea提交内容空格回车转换问题 /*my-enter-bind.js*/ /*回车换行显示转义*/ 'use strict'; angular.module('app') .di ...

  9. AngularJS学习--- AngularJS中XHR(AJAX)和依赖注入(DI) step5

    前言:本文接前一篇文章,主要介绍什么是XHR,AJAX,DI,angularjs中如何使用XHR和DI. 1.切换工具目录 git checkout -f step- #切换分支 npm start ...

随机推荐

  1. Web Component总结

    Web Component 一个Web组件通常由四个部分组成:模板.Shadow DOM.自定义元素与打包,其中Shadow DOM解决了组件在页面中的封装问题 Shadow DOM 有shadow ...

  2. Linux 安装及配置 Nginx + ftp 服务器

    Nginx 安装及配置 一.Nginx 简介: Nginx("engine x") 是一款是由俄罗斯的程序设计师 Igor Sysoev 所开发高性能的 Web和 反向代理服务器, ...

  3. Redis在Php项目中的实际应用场景

    前言 一些案例中有的同学说为什么不可以用string类型,string类型完全可以实现呀 我建议你看下我的专栏文章<Redis高级用法>,里面介绍了用hash类型的好处 商品维度计数 对商 ...

  4. 用程序读取CSV文件的方法

    CSV全称 Comma Separated values,是一种用来存储数据的纯文本文件格式,通常用于电子表格或数据库软件.用Excel或者Numbers都可以导出CSV格式的数据. CSV文件的规则 ...

  5. Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类

    Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类 ============================== ©Copyright 蕃薯耀 20 ...

  6. BSA Network Shell系列-redi命令

    redi ## 1 功能概述 redi将输出重定向到一个文件中 ## 2 语法 redi [-?] [-a] filename ## 3 使用示例 1 将输出重定向到隐式路径所在主机的/tmp/hah ...

  7. 【转】shell学习笔记(三)——引用变量、内部变量、条件测试、字符串比较、整数比较等

    1.env显示当前的环境变量 2.PS1='[\u@\h \w \A] \$' 可以设置bash的命令与提示符. 3.echo $$ 显示当前bash的PID号 4.echo $?显示上一条指令的回传 ...

  8. 【转】sed命令n,N,d,D,p,P,h,H,g,G,x解析

    1. sed执行模板=sed '模式{命令1;命令2}' 即逐行读入模式空间,执行命令,最后输出打印出来 2. 为方便下面,先说下p和P,p打印当前模式空间内容,追加到默认输出之后,P打印当前模式空间 ...

  9. 监控 Linux 性能的 18 个命令行工具[转]

    对于系统和网络管理员来说每天监控和调试Linux系统的性能问题是一项繁重的工作.在IT领域作为一名Linux系统的管理员工作5年后,我逐渐认识到监控和保持系统启动并运行是多么的不容易.基于此原因,我们 ...

  10. linux的8小时差问题解决

    下面是同步时间的解决方法: 1.vi /etc/sysconfig/clock #编辑文件 ZONE="Asia/Shanghai" UTC=false #设置为false,硬件时 ...