我在将数据传递到应用程序中导入的模块的方式时遇到问题。
实际上,我已经创建了一个模块,其中包含我在应用程序中使用的许多组件。
我想给这个模块两个数据对象User和Company。
问题是我不想将它们作为每个组件中的输入传递,我觉得这在我的模块中是多余的,我将不得不在同一个对象的任何地方处理输入。
我想要的是将这两个对象传递给导入的模块,并能够将它们放在共享服务中以在模块周围使用它们。
我知道我可以使用forRoot()传递配置对象。但就我而言,我不确定它是为此目的而设计的(传递两个数据对象)。而且,如果用户尚未登录,我认为该对象将为null,以后将不会更新。
感谢您的帮助。
答案 0 :(得分:0)
这里最好的做法是创建一个包含2个数据对象的基本服务。 像这样:
<ControlTemplate TargetType="local:TestControl">
<Grid VerticalAlignment="{TemplateBinding VerticalAlignment}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid Background="Red">
<TextBlock Text="Header"/>
</Grid>
<Grid x:Name="ContentGrid" Grid.Row="1" Background="Orange" MinHeight="0" Height="auto">
<Grid.RenderTransform>
<CompositeTransform x:Name="contentTransForm" ScaleY="0" ScaleX="1"/>
</Grid.RenderTransform>
<TextBlock Text="Content">
<!--<TextBlock.RenderTransform>
<CompositeTransform x:Name="contentTransForm" ScaleY="0" ScaleX="1"/>
</TextBlock.RenderTransform>-->
</TextBlock>
</Grid>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="DisplayStates">
<VisualState x:Name="Minimized">
<Storyboard>
<DoubleAnimation Storyboard.TargetName="contentTransForm"
Storyboard.TargetProperty="ScaleY"
Duration="0:0:0.2"
To="0"/>
</Storyboard>
<VisualState.Setters>
<Setter Target="ContentGrid.Visibility" Value="Collapsed" />
</VisualState.Setters>
</VisualState>
<VisualState x:Name="Maximized">
<Storyboard>
<DoubleAnimation Storyboard.TargetName="contentTransForm"
Storyboard.TargetProperty="ScaleY"
Duration="0:0:0.2"
To="1"/>
</Storyboard>
<VisualState.Setters>
<Setter Target="ContentGrid.Visibility" Value="Visible" />
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
</Grid>
</ControlTemplate>
每个需要此数据的组件都必须注入服务并检索数据。
import { Injectable } from '@angular/core';
@Injectable()
export class TestService {
user: User;
company: Company;
constructor() { }
}
但是,如果您需要将更新从1个组件推送到另一个组件,则应在服务中使用Subjects而不是普通对象。点击here了解有关此信息。