2016-02-27 116 views
0

我有角模板顯示使用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> 

如何解決這個問題?

+1

什麼是保持邏輯模板的原因是什麼?通常一個字符串比較比如你自己的函數會有很大的意義。 – brod

+0

文檔說「**沒有使用文字符號創建RegExp:**您無法在Angular表達式中創建正則表達式。」 - [AngularJS開發人員指南 - 表達式](https://docs.angularjs.org/guide/expression#angular-expressions-vs-javascript-expressions) – georgeawg

回答

1

我相信你的問題是使用一個非轉義的|符號,我不知道你將如何去轉義角模板中的字符串 - 但是(imo)下面的代碼段將是更合適的解決方案(儘管不符合你原來的問題params)。

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>

+0

我自己做了相同的解決方法。那麼,該片段不適用於我,但實際的應用程序呢。 – Skyvory