Angular / Typescript:在构造函数中访问对象数据

时间:2018-03-21 11:35:35

标签: javascript angular typescript

尝试在构造函数中访问对象的数据会返回" undefined"宾语。它适用于ngOnInit()函数,但每次组件启动时都需要数据(将要重置)。

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <android.support.v7.widget.Toolbar
            android:id="@+id/main_toolbar"
            app:titleTextAppearance="@style/TextAppearance.AppCompat.Light.SearchResult.Title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:background="@color/colorPrimary"
            android:theme="@style/ThemeOverlay.AppCompat.Light" />

        <FrameLayout
            android:id="@+id/main_container"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

        </FrameLayout>

        <android.support.design.widget.BottomNavigationView
            android:id="@+id/mainBottomNav"
            android:background="@color/list_background"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:menu="@menu/bottom_menu"
            android:layout_alignParentBottom="true"/>

    </RelativeLayout>
    
    <android.support.design.widget.FloatingActionButton
        android:id="@+id/add_post_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="?attr/actionBarSize"
        android:layout_marginEnd="16dp"
        android:layout_marginRight="16dp"
        android:clickable="true"
        android:layout_gravity="bottom|end"
        android:focusable="true"
        android:visibility="visible"
        app:elevation="6dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:srcCompat="@mipmap/ic_launcher" />

</android.support.constraint.ConstraintLayout>

2 个答案:

答案 0 :(得分:1)

您是否已阅读此documentation

它说:

  

通过调用构造函数创建组件/指令后,   Angular按以下顺序调用生命周期钩子方法   特定时刻

然后根据执行顺序列出所有方法。

您可以阅读 lifecycle hook 的完整文档,当我们开始使用Angular开发应用程序时,最好知道这一点。

答案 1 :(得分:1)

除了分配给它的初始值之外,您无法在其构造函数中访问组件输入的值。

为什么?

嗯,简单:Angular必须首先创建组件(通过调用其构造函数)。只有这样才能设置输入。如果您尝试在构造函数中使用输入属性,显然它将是undefined

在你的情况下,你应该使用ngOnInit中的值,或者,如果你真的需要它在构造函数中,以另一种方式检索它(通过使用注入的服务,一个全局共享对象......)