角度传递数据到导入的模块

时间:2018-08-03 08:53:03

标签: angular service module

我在将数据传递到应用程序中导入的模块的方式时遇到问题。

实际上,我已经创建了一个模块,其中包含我在应用程序中使用的许多组件。

我想给这个模块两个数据对象User和Company。

问题是我不想将它们作为每个组件中的输入传递,我觉得这在我的模块中是多余的,我将不得不在同一个对象的任何地方处理输入。

我想要的是将这两个对象传递给导入的模块,并能够将它们放在共享服务中以在模块周围使用它们。

我知道我可以使用forRoot()传递配置对象。但就我而言,我不确定它是为此目的而设计的(传递两个数据对象)。而且,如果用户尚未登录,我认为该对象将为null,以后将不会更新。

感谢您的帮助。

1 个答案:

答案 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了解有关此信息。