【问题标题】:Preserve line breaks when binding textarea content to md-card将 textarea 内容绑定到 md-card 时保留换行符
【发布时间】:2018-06-11 10:01:08
【问题描述】:

我有一个 textarea 和一个 md-card。

angular.module('dashboard', ['ngMaterial'])
  .config(function($mdThemingProvider) {
    $mdThemingProvider.theme('default')
      .dark()
      .primaryPalette('indigo')
      .accentPalette('yellow');
  })
  .controller('previewCtrl', function() {
    //previewCtrl = this;
    this.previewData = previewData;
  });
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/angular_material/1.1.0/angular-material.min.css">

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular-animate.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular-aria.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular-messages.min.js"></script>

<!-- Angular Material Library -->
<script src="https://ajax.googleapis.com/ajax/libs/angular_material/1.1.0/angular-material.min.js"></script>

<!-- Angular Material Library -->
<script src="https://ajax.googleapis.com/ajax/libs/angular_material/1.1.0/angular-material.min.js"></script>

<div ng-app="dashboard">
  <textarea required type="text" rows="5" ng-model="form.text"></textarea>

  <md-card class="md-whiteframe-9dp card-noimage">
    <md-card-title>
      <md-card-title-text>
        <span class="md-headline">Title</span>
        <span class="md-subhead">Sub heading</span>
      </md-card-title-text>
    </md-card-title>
    <md-card-content ng-bind="form.text">
    </md-card-content>
  </md-card>
</div>

我正在尝试将在 textarea 中输入的文本放入 md-card 的内容区域。

问题 - 每当我在文本区域中键入 &lt;br&gt;\n 时,卡片都会显示“
”和“\n”,而不是显示换行符。我想显示换行符而不是它们

【问题讨论】:

  • 您可以尝试改用ng-bind-html 属性吗?

标签: html angularjs angular-material


【解决方案1】:

要通过 AngularJS 注入 HTML,您可以使用 ng-bind-html 指令而不是 ng-bind

它需要你将ngSanitize 模块注入你的应用程序并首先导入它的JS文件

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular-sanitize.min.js"></script>

这样,文本被理解为html。因此,&lt;br&gt; 标记将呈现为新行。


但是\n 不是 HTML,因此您可以创建一个过滤器来将其替换为 &lt;br&gt; 标记,如下所示:

app.filter('newLines', function () {
    return function(text) {
        if(text)
            return text.replace(/\\n/g, '<br/>');
    };
});

现在您可以像这样使用ng-bind-html 指令和newLines 过滤器:

<md-card-content ng-bind-html="form.text | newLines">
</md-card-content>

这是应用上述修改后的代码:

angular.module('dashboard', ['ngMaterial', 'ngSanitize'])
  .config(function($mdThemingProvider) {
    $mdThemingProvider.theme('default')
      .dark()
      .primaryPalette('indigo')
      .accentPalette('yellow');
  })
  .controller('previewCtrl', function() {
    //previewCtrl = this;
    this.previewData = previewData;
  })
  .filter('newLines', function () {
      return function(text) {
          if(text)
              return text.replace(/\\n/g, '<br/>');
      };
  });
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/angular_material/1.1.0/angular-material.min.css">

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular-animate.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular-aria.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular-messages.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular-sanitize.min.js"></script>
<!-- Angular Material Library -->
<script src="https://ajax.googleapis.com/ajax/libs/angular_material/1.1.0/angular-material.min.js"></script>

<!-- Angular Material Library -->
<script src="https://ajax.googleapis.com/ajax/libs/angular_material/1.1.0/angular-material.min.js"></script>

<div ng-app="dashboard">
  <textarea required type="text" rows="5" ng-model="form.text"></textarea>

  <md-card class="md-whiteframe-9dp card-noimage">
    <md-card-title>
      <md-card-title-text>
        <span class="md-headline">Title</span>
        <span class="md-subhead">Sub heading</span>
      </md-card-title-text>
    </md-card-title>
    <md-card-content ng-bind-html="form.text | newLines">
    </md-card-content>
  </md-card>
</div>

【讨论】:

    猜你喜欢
    • 2015-07-25
    • 1970-01-01
    • 2017-05-17
    • 2015-08-16
    • 2013-04-16
    • 1970-01-01
    • 2015-12-21
    相关资源
    最近更新 更多