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