2017-04-25 92 views
0

我用黑盒邏輯創建了一個應用程序。我有一個基於此的配置和頁面構建。 我爲我的所有頁面使用了Angular組件,並且確認彈出了一些操作的消息。使用AngularJS替換字符串中的特定字符

從外面我想有這種結構的確認消息 這樣

'Are you sure you want to revoke license for #:SiteName# ?' 

在我的成分,我有一個

$scope.dataItem = { SiteName: 'stackOverflow', Id: 1} 

當從外面我打電話showConfirmation('Are you sure you want to revoke license for #:SiteName# ?') 我想在裏面剪切和編輯此字符串的邏輯,以便我顯示的消息將爲'Are you sure you want to revoke license for stackOverflow ?' 或程序性文字,如

'Are you sure you want to revoke license for ' + $scope.dataItem.SiteName + ' ?' 

基本上,我想是削減該字符串,編輯和更改的地方是

#: property # to replace with actually value of $scope.dataItem.property. 

回答

0

使用String.prototype.replace()

'Are you sure you want to revoke license for #:SiteName# ?'.replace(/\#\:SiteName\#/, $scope.dataitem.SiteName); 

編輯:

多一點的可重用代碼:

function replaceSomething(originalString, variableName) { 
    var regexPattern = "\#\:" + variableName + "\#"; 
    var regex = new RegExp(regexPattern, "g"); 
    return originalString.replace(regex, $scope.dataItem[variableName]); 
} 

現在你用它想:

replaceSomething('Are you sure you want to revoke license for #:SiteName# ?', "SiteName"); 

它在動作A JSFiddle

有關正則表達式的大量有用信息可以參考here

EDIT2:

這裏是另一種可能性,即可能瘦更接近你問:

function replaceSomething(originalString) { 
    var regexPattern = "\#\:(.+)\#"; 
    var regex = new RegExp(regexPattern, "g"); 
    var variableName = regex.exec(originalString)[1]; 
    return originalString.replace(regex, $scope.dataItem[variableName]); 
} 
+0

確定...但我不想要硬核有.SiteName,我想了解'SiteName'從包括#:#字符串 – GomuGomuNoRocket

+0

@GomuGomuNoRocket我更新了我的答案,包括一段代碼,可以是可重複使用的。 –

0

那麼它很容易,

args.confirmation.Message = 'Are you sure you want to revoke license for #:SiteName# ?' 

var property = args.confirmation.Message.substring(args.confirmation.Message.lastIndexOf("#:") + 2, args.confirmation.Message.lastIndexOf("#")); 

var message = args.confirmation.Message.replace('\#\:' + property + '\#', data[property]); 
相關問題