2017-04-25 3 views
0

Ich habe eine App mit Black-Box-Logik erstellen. Ich habe eine Konfiguration und Seitenaufbau basierend darauf. Ich verwende Angular-Komponenten für alle meine Seiten und Bestätigungs-Popup-Nachricht für einige Aktionen.Ersetzen Sie bestimmte Zeichen in einer Zeichenfolge mit AngularJS

Von außen ich will diese Struktur für Bestätigungsmeldung haben wie diese

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

Inside my Komponenten Ich habe eine

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

Und wenn von außen i showConfirmation('Are you sure you want to revoke license for #:SiteName# ?') nennen möchte ich innen in Logik zum Ausschneiden und Bearbeiten dieser Zeichenfolge, so dass die Nachricht, die ich anzeigen werde 'Are you sure you want to revoke license for stackOverflow ?' oder programmatisch wie

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

Im Grunde, dass ich will, ist diese Zeichenfolge schneiden, bearbeiten und ändern, wo

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

Antwort

0

Verwendung String.prototype.replace().

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

EDIT:

Ein bisschen mehr wieder verwendbaren Code:

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

Jetzt verwenden Sie es mögen:

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

A JSFiddle davon in Aktion.

Viele nützliche Informationen zu regulären Ausdrücken finden Sie unter here.

EDIT2:

Hier ist eine weitere Möglichkeit, dass zu können lehnen näher, was Sie gefragt:

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

ok ... aber i dont will hardcore zu haben .SiteName, ich will 'SiteName' von enthalten verstehen #: ... # string – GomuGomuNoRocket

+0

@GomuGomuNoRocket Ich habe meine Antwort aktualisiert, um ein Stück Code, der sein kann wiederverwendbar. –

0

Nun, es war einfach,

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]); 
Verwandte Themen