2017-11-11 88 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