4-6 组件嵌套和投影组件(2)

把这个去掉

接下来要把这个组件做完

这个容器组件,理想状态下是它


控制这里显示几行几列

div是一个容器


支持滚动。

设置为网格,现在不设置网格的属性。那些东西我们放在属性里面。比如我们可以做一个input属性,让它可以设置。

grid-gap是每一个区块的间隔。

如果多出来了。那么按照行的方式去增长。比如多出来的就会折行显示。在下一行显示。

y轴不允许滚动。横轴上允许滚动。

再加ngStyle,我们要设置它的行的模板和列的模板。行的模板一会在ts的类当中定义。




类似的会有一个列的模板。



完整的样子。把行和类在组件中定义

ts内,首先需要几个属性
它是一行有多少列。,默认一行有8列。

屏幕当中可现实的列数

地下有个指示器要不断的滑动,那个不系统提供的,是我们自己做的。通过压紧一个区块的margin来实现。所以这里我们定义silderMargin默认值设置为0.

get计算属性。这样一个计算属性,在外界看来就像是一个属性一样。

get快捷键

自动生成代码 自己写属性名就可以了

这里面用一个css的函数叫做minmax,就是最小值和最大值的一个区间。最小值自动,最大是内容的。

方法的快捷键。
函数
templateColumns这用css的repeat函数。

参数1是多少列。参数2是每列的宽度。宽度用css提供的calc()方法进行计算。100vm就是屏幕的可见宽度。

减去可视的列数乘以0.4。 这个0.4是中间的间隔。

最后要有rem

再除以列数。

这里加个括号,先减,再除以

还差了一层括号

处理滚动,有可能会大于它可视的范围。所以需要处理一些它的滚动

ts建好方法

在模板里面我们需要一个区域。


这个区域什么时候出现呢?滚动的时候才出现这个区域。

地下的小红条,来回的移动。通过ngStyle来做。

通过的是不断挤压它的margin

让它的sliderMargin等于一个值。

上下的marign是0,左右的margin是一个百分比。

乘以100以后,后面要加上百分比

一共是8列,但是显示的是5列。所有它可以左右的滚动。滚动的时候底下有个小的指示器。

投影组件有它的特点,它和传统组件的区分就在于,它的定制化的自由度比较大。但是这不意味着投影组件就比一般的组件要好。它对组件的控制力要弱。
因为你把里面的内容下发给了开发者自己去控制。这样缺少一个规范和约束。

虽然可以做约束,但是约束还是相当弱。
传统组件的好处,只暴露给你该暴露的一些属性和方法。然后直接调用就可以了。而且写法非常简单,从开发者角度。拿到这个组件直接放到这里就ok了

但是投影组件写起来要麻烦一些。因为每个里面的东西都要自己去定义这样一些东西,格式。如果在风格相对统一的界面里面。会发现这么写来写去非常的啰嗦。没有传统组件那样自己接放的模式,直接用就ok了。所以每一种组件都有好处,都有自己的适用场景,根据场合和场景选择用不同的组件。

投影型组件一般适合做容器的时候,比如在这里的grid容器。

如果把这个组件放在咱们自己真正的模板当中的时候,会发现有的时候会有一些事件的重复传递 。放在grid里面的话,你就会发现事件要从grid再传出来。

冗余的事件,通过ngContent可以把它直接放在根组件当中去暴露,这样就节省了事件的冲突的传递。

 

结束

原文地址:https://www.cnblogs.com/wangjunwei/p/13562791.html