2017-01-17 3 views
1

Можно ли получить детей в пользовательских компонентах?Можно ли получить детей в пользовательских компонентах?

<myCustomComponent> 
    <Label #id1 text="ID 1"></Label> 
    <Label #id2 text="ID 2"></Label> 
</myCustomComponent> 

Есть ли способ, чтобы получить ссылку из этих двух Lable, чтобы получить их расположены в GridLayout в моем пользовательском компоненте?

ответ

3

Помимо варианта с getViewById() есть несколько вариантов, чтобы увидеть ребенок раскладки в или их индекс, а также добавлять, удалять, вставлять и перезагружать детей.

например. page.xml

<Page xmlns="http://schemas.nativescript.org/tns.xsd" navigatingTo="navigatingTo"> 
    <StackLayout id="st" class="p-20"> 
     <Label id="lbl-title" text="Tap the button" class="h1 text-center"/> 
     <Button text="TAP" tap="{{ onTap }}" class="btn btn-primary btn-active"/> 
     <Label text="{{ message }}" class="h2 text-center" textWrap="true"/> 
    </StackLayout> 
</Page> 

page.ts

let page = <Page>args.object; 
let stack = <StackLayout>page.getViewById("st"); 
let label = <Label>page.getViewById("lbl-title"); 

console.log("page.content: " + page.content); // page.content: StackLayout<st>@file:///app/main-page.xml:19:5; 

console.log("stack.getChildrenCount(): " + stack.getChildrenCount()) // 3 
console.log("stack.getChildAt(1): " + stack.getChildAt(1)); // stack.getChildAt(1): Button(5)@file:///app/main-page.xml:21:9; 
console.log("stack.getChildIndex(label): " + stack.getChildIndex(label)); // 0 

console.log("stack.parent: " + stack.parent); // stack.parent: Page(1)@file:///app/main-page.xml:7:1; 

var newlabel = new Label(); 
newlabel.text = "new Label"; 
stack.addChild(newlabel); 

Больше обо всех поддерживаемых методов here

+0

Это именно то, что я ищу, спасибо. – user3496167

2

Класс вида имеет метод getViewById() для этой цели.

В моем-component.xml:

<StackLayout loaded="onLoaded"> 
    <Label id="label1" text="ID 1" mycustomattribute="Hi there."></Label> 
    <Label id="label2" text="ID 2"></Label> 
</StackLayout> 

В моем-component.js:

exports.onLoaded = function(args) { 

    let view = args.object; 
    let label1 = view.getViewById('label1'); 
    console.log(label1.mycustomattribute); 
    // > "Hi there." 
}; 

 Смежные вопросы

  • Нет связанных вопросов^_^