Can';以编程方式设置Nativescript ProxyViewContainer上的边距

Can';以编程方式设置Nativescript ProxyViewContainer上的边距,nativescript,angular2-nativescript,nativescript-angular,Nativescript,Angular2 Nativescript,Nativescript Angular,angular团队有我在代码库中广泛使用的包。我正在通过Nativescript将这些核心组件中的许多转换为也可在移动设备上使用,为此,我创建了自己的组件来模拟flex布局功能。FlexboxLayout完成了我需要该组件本机执行的所有操作,除了提供一种机制,以使布局的组件之间具有均匀的间隙。(注意:非由于间隙不均匀而产生的间隙)。基本上,如果布局为行,flex布局将右边距设置为等于间隙大小,如果布局为列,将下边距设置为等于间隙大小。下面是我的代码,试图在Nativescript中执行同样的操作

angular团队有我在代码库中广泛使用的包。我正在通过Nativescript将这些核心组件中的许多转换为也可在移动设备上使用,为此,我创建了自己的组件来模拟flex布局功能。FlexboxLayout完成了我需要该组件本机执行的所有操作,除了提供一种机制,以使布局的组件之间具有均匀的间隙。(注意:由于间隙不均匀而产生的间隙)。基本上,如果布局为行,flex布局将右边距设置为等于间隙大小,如果布局为列,将下边距设置为等于间隙大小。下面是我的代码,试图在Nativescript中执行同样的操作,但这对我来说并不适用

import { Component, ElementRef, Input, ViewChild } from "@angular/core";

import { FlexboxLayout } from "tns-core-modules/ui/layouts/flexbox-layout";
import { View } from "tns-core-modules/ui/core/view/view";

@Component({
    selector: "flex-layout",
    template: `
        <FlexboxLayout
            #flexbox
            [flexDirection]="layout"
            [flexWrap]="wrap"
            [justifyContent]="justify"
            [alignItems]="align"
            [ngStyle]="{ width: width, height: height }"
        >
            <ng-content></ng-content>
        </FlexboxLayout>
    `
})
export class FlexLayoutComponent {
    @Input() layout: string = "row";
    @Input() wrap: string;
    @Input() justify: string;
    @Input() align: string = "start";
    @Input() gap: number;
    @Input() width: number;
    @Input() height: number;
    @ViewChild("flexbox") flexboxEl: ElementRef;

    ngAfterContentInit() {
        let flexbox: FlexboxLayout = <FlexboxLayout>(
            this.flexboxEl.nativeElement
        );
        if (this.gap) {
            flexbox.eachChildView((child: View) => {
                if (this.layout === "row") {
                    child.marginRight = this.gap;
                } else {
                    child.marginBottom = this.gap;
                }
                return true;
            });
        }
    }
}

对您希望能够设置样式的所有自定义组件执行此操作。

您确定
此。间隙
有一个值并通过
if
条件吗?你有一个游乐场示例吗?啊,是的,谢谢你这么做,这让我意识到问题是,如果孩子是ProxyViewContainer(我的测试用例),那么边距设置就不起作用。但它确实适用于本机组件。请参阅我添加的内容。当它是自定义组件时,它应该接受
边距
作为
@Input()
,并将其绑定到
我的标签中
标签的边距属性。这主意不错,但不适用于这里,请参阅我上面的原因。我的标签可能在根位置有两个标签,或者更可能由更多自定义组件组成。我有定制组件。不会一路通过保证金的!:)不幸的是,还不可能传递根元素(如AngularWeb)的属性。您必须通过@Input执行此操作,即使您有多个标签,您仍然可以处理一个输入并将值绑定到所有标签。您确定
this.gap
有一个值并通过
if
条件吗?你有一个游乐场示例吗?啊,是的,谢谢你这么做,这让我意识到问题是,如果孩子是ProxyViewContainer(我的测试用例),那么边距设置就不起作用。但它确实适用于本机组件。请参阅我添加的内容。当它是自定义组件时,它应该接受
边距
作为
@Input()
,并将其绑定到
我的标签中
标签的边距属性。这主意不错,但不适用于这里,请参阅我上面的原因。我的标签可能在根位置有两个标签,或者更可能由更多自定义组件组成。我有定制组件。不会一路通过保证金的!:)不幸的是,还不可能传递根元素(如AngularWeb)的属性。您必须通过@Input进行操作,即使有多个标签,也可以处理一个输入并将值绑定到所有标签。
import { registerElement } from "nativescript-angular/element-registry";
import { StackLayout } from "tns-core-modules/ui/layouts/stack-layout";
registerElement('my-component-selector', () => StackLayout);