【问题标题】:String replace multiple character in angular template logic字符串替换角度模板逻辑中的多个字符
【发布时间】:2016-02-27 03:23:35
【问题描述】:

我有一个使用 ng-repeat 显示项目列表的角度模板,该模板对项目的属性进行比较。
我希望逻辑保留在模板中并立即显示结果,但下面的逻辑会抛出错误并导致角度渲染失败。
用单个字符正常替换有效,但不能用多个字符替换。

<div ng-repeat="item in items">
    <p>{{item.old_name}}</p>
    <input ng-model="item.new_name">
    <span>
        {{item.old_name.replace(/ |_/g, '-') == item.new_name(/ |_/g, '-') ? "same" : "not same"}}
    </span>
</div>

如何解决这个问题?

【问题讨论】:

  • 将逻辑保留在模板中的原因是什么?通常,像您这样的字符串比较在它自己的功能中会很有意义。
  • 文档说“没有使用文字符号创建正则表达式:您不能在 Angular 表达式中创建正则表达式。” -- AngularJS Developer Guide - Expressions

标签: javascript angularjs regex replace


【解决方案1】:

我相信您的问题是使用未转义的 | 符号,我不确定您将如何在角度模板中转义字符串 - 但是(imo)下面的 sn-p 会更合适解决方案(虽然不符合您原来的问题参数)。

function ctrlr ($scope) {
  $scope.items = [
    { name: 'name one', newname: 'name diff' },
    { name: 'name_two', newname: 'name two' },
    { name: 'name three', newname: 'name three' },
  ]
      
  $scope.compareString = function(str, str2) {
    return str.replace(/ |_/g, '-') === str2.replace(/ |_/g, '-') ? 'same' : 'different'
  }
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div  ng-app ng-controller="ctrlr">
  <div ng-repeat="item in items">
    {{ compareString(item.name, item.newname) }}
  </div>
</div>

【讨论】:

  • 我自己也做了同样的解决方法。好吧,sn-p 对我不起作用,但实际的应用程序可以。
猜你喜欢
  • 1970-01-01
  • 2016-04-07
  • 1970-01-01
  • 2021-01-05
  • 1970-01-01
  • 2015-03-15
  • 1970-01-01
  • 1970-01-01
  • 2016-09-10
相关资源
最近更新 更多