首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >StackLayout - addChild不是一个函数。

StackLayout - addChild不是一个函数。
EN

Stack Overflow用户
提问于 2017-12-01 18:14:15
回答 1查看 524关注 0票数 0

这种情况发生在NativeScript +角度应用程序中。

我试图使用StackLayout视图中的StackLayout.addChild方法动态添加标签,就像文档说的那样。

我的看法如下:

代码语言:javascript
复制
<MainActionBar > </MainActionBar>
    <ScrollView orientation="vertical" #scroll>

    <StackLayout class="full-page settings-list pad-bottom" #stack >
            <Label class="text-color" text="Cadastro genérico"></Label>
    </StackLayout>

    <StackLayout class="full-page settings-list pad-bottom">
            <Button class="btn btn-primary btn-active" id="createInput" text="Cria input" (tap)="criaInput()"></Button>
            <Button class="btn btn-primary btn-active" id="createSelect" text="Cria select" (tap)="criaSelect()"></Button>
    </StackLayout>

</ScrollView>

打字稿班:

代码语言:javascript
复制
    import { FormControl, Validators } from '@angular/forms';
import {
    ViewChild, ChangeDetectorRef, OnInit, AfterViewInit,
    ChangeDetectionStrategy, Component
} from '@angular/core';

import {NavigationEnd} from '@angular/router';

import sideDrawerModule = require('nativescript-telerik-ui/sidedrawer');
import {RadSideDrawerComponent} from "nativescript-telerik-ui/sidedrawer/angular";
import {DrawerTransitionBase, PushTransition} from "nativescript-telerik-ui/sidedrawer";
import {Page} from "ui/page";
import {Frame} from "ui/frame";
import {RouterExtensions} from "nativescript-angular";
import {DrawerService} from "../../services/drawer.service";
import {ActionBarUtil} from "../../utils/actionbar.util";
import {Observable} from "data/observable";

import { Label } from 'ui/label';

import { StackLayout } from 'ui/layouts/stack-layout';


@Component({
    moduleId: module.id,
    selector: 'cadastro-generico',
    templateUrl: 'cadastro-generico.component.html',
    styleUrls: ['cadastro-generico.component.scss'],
    changeDetection: ChangeDetectionStrategy.Default
})
export class CadastroGenericoComponent extends Observable implements OnInit, AfterViewInit {


    @ViewChild('stack') stack : StackLayout;

    constructor(private routerExtensions: RouterExtensions,
        private changeDetectionRef: ChangeDetectorRef,
        public drawerService: DrawerService)  {

        super();
            console.log(`RelatorioComponent constructor`);
        }

        ngOnInit() {
            console.log(`RelatorioComponent ngOnInit`);
        }

        ngAfterViewInit() {
            console.log("RelatorioComponent ngAfterViewInit - this.drawerComponent.sideDrawer=", this.drawerService.drawer);
            this.changeDetectionRef.detectChanges();
        }

        navigateTo(pathToNavigate:string) {
            console.log("navigating to:", pathToNavigate);
            this.routerExtensions.navigate([pathToNavigate], {clearHistory: true});
        }

        criaInput(){
            console.log("clicou cria input")
            let lbl = new Label()
            lbl.text = "Share This!"
            this.stack.addChild(lbl)
        }

        criaSelect(){
            console.log("clicou cria select");
        }
}

方法criaInput()应该向屏幕添加一个标签。Altought,当我单击该按钮时,会发生以下错误:

System.err: com.tns.NativeScriptException:

System.err: Calling js method onClick failed

System.err: TypeError: this.stack.addChild is not a function

对如何解决这个问题有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-02 16:58:52

将其更改为:

代码语言:javascript
复制
@ViewChild('stack') stack : ElementRef; // import { ElementRef } from "@angular/core";

// and later:
const myStack: StackLayout = this.stack.nativeElement; // import { StackLayout } from "tns-core-modules/ui/layouts/stack-layout";
myStack.addChild(.....); 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47599203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档