2017-11-11 87 views
0

我需要通過字符串鍵來解析對象,就像AngualarJS $解析服務一樣。 我有一個對象如何通過Angular 4中的字符串解析對象

message = { 
    text: 'msome text', 
    userFrom: { 
    name: 'Alex' 
    } 
} 

而且我有一個字符串「userFrom.name」

如何我可以通過使用一些角4服務「userFrom.name」字符串獲得message.userFrom.name價值?

在AngularJS這是可以做到這樣的:

$parse("userFrom.name")(message) === 'Alex'; 
+0

你可以添加一些更多的情況下你的問題。你想達到什麼目的? – Flaugzig

回答

0

我不認爲在新的Angular中有這樣的服務,但你可以使用任何標準的JS庫來做到這一點。

object-path上NPM

安裝與npm install --save object-path

的lib與npm install --save-dev @types/object-path

然後在你的代碼安裝打字稿分型

import * as objectPath from 'object-path' 

const message = { 
    text: 'msome text', 
    userFrom: { 
    name: 'Alex' 
    } 
} 

objectPath.get(message, "userFrom.name") === 'Alex' 
+0

好的。這將工作。我可以自己創建相同的功能,但我想知道Angular 4是如何做到的。 – salik

+0

我不認爲Angular在其公共API中提供了這種服務。 HTML模板使用JIT或AOT編譯進行編譯。瀏覽Angular源代碼時,您可以在https://github.com/angular/angular/tree/master/packages/compiler/src/template_parser中找到有關模板解析的類 –

0

聲明與屬性的界面,如下圖所示對象,

export interface IMessage{ 
    text:string; 
    userFrom:{ 
    name:string; 
    } 
} 

然後你就可以解析對象

(<IMessage>this.message).userFrom.name; // gives Alex 

LIVE DEMO

+0

敢於評論downvoters – Aravind

+0

@salik希望使用字符串值來定位對象屬性。 「userFrom.name」這個路徑可以存儲在某個變量中,然後用在對象 –

+0

@NoémiSalaün中。我正在從AngularJS遷移,所以它現在是如何工作的... – salik