Sun*_*arg 7 angular mdc-components
我正在尝试使用 .angular4 项目创建mdc-componentsangular-cli
。所以我使用 npm 命令安装了 moduled
npm install material-components-web
Run Code Online (Sandbox Code Playgroud)
这个安装了
"material-components-web": "^0.22.0"
Run Code Online (Sandbox Code Playgroud)
然后创建了一个包含滑块的 HTML 标记的组件
<div #slider class="mdc-slider" tabindex="0" role="slider" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0" aria-label="Select Value">
<div class="mdc-slider__track-container">
<div class="mdc-slider__track"></div>
</div>
<div class="mdc-slider__thumb-container">
<svg class="mdc-slider__thumb" width="21" height="21">
<circle cx="10.5" cy="10.5" r="7.875"></circle>
</svg>
<div class="mdc-slider__focus-ring"></div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
在 ts 端使用 ViewChild
@ViewChild('slider') elSlider: ElementRef;
Run Code Online (Sandbox Code Playgroud)
并使用MDCSlider
类包装此元素
let mdcSlider = new MDCSlider(this.elSlider.nativeElement);
Run Code Online (Sandbox Code Playgroud)
然后为文件中的同一个 mdc 组件导入 sassstyles.scss
文件
@import '~@material/slider/mdc-slider';
Run Code Online (Sandbox Code Playgroud)
这在 UI 上呈现了一个漂亮的材质滑块组件,并且工作正常。
监听更改事件
mdcSlider.listen('MDCSlider:change', () => console.log("Value changed to ",mdcSlider.value));
Run Code Online (Sandbox Code Playgroud)
并在浏览器控制台上记录滑块的当前值。
但是我对每个组件的基础和适配器类感到困惑。
从文档中,我得到了
基础类是与dom元素进行交互,在交互的名称上我可以
1)监听事件
2) 获取/设置组件的当前值
我可以将我的自定义适配器传递给基础类。
我对此有一些疑问
1)要使用组件,每次都必须使用基础类?使用自定义适配器实现?
2)除了angular2的复选框示例之外,任何显示基础和适配器使用的场景或示例?
3)如果我必须创建自己的角度组件,是否使用基础类?
大多数情况下,这些问题都是相关的,我会一次回答一个:
要使用组件,每次都必须使用基础类?使用自定义适配器实现?
是的。目前,JavaScript MDC Web 组件有一个生命周期,其中每次初始化组件时都会将默认适配器传递给基础。您可以保留对它的引用,或者attachTo()
如果您只是希望这一切自动发生,则可以使用该函数。所有这一切都意味着,即使您所做的只是初始化一个新组件,您也正在使用适配器/基础模式,因为它是组件生命周期的一部分。唯一需要自定义适配器的情况是,如果您处于与 DOM 交互方面偏离惯用 JavaScript 的上下文中,即:Vuejs、React 等……
除了 angular2 的复选框示例之外,还有任何展示基础和适配器使用的场景或示例吗?
我们正在改变我们的方法。/framework-examples
目前,我们在存储库的根目录中有一些大约 6 个月前的示例。我们还有几个开放的拉取请求,我们将链接到我们认为朝着正确方向发展的外部项目。目前我们正在审查一项用于 Angular 的项和一项用于 React 的项。这是我们未来将采取的方法。
如果我必须创建自己的角度组件,是否使用基础类?
在此示例中,您可以看到这里确实使用了 Foundation,以及来自 mdc.textfield.adapter.ts 的自定义适配器对象
请注意,他定义了private foundation: {...} = new MDCTextfieldFoundation(this.adapter)
,然后在ngAfterContentInit()
函数中调用了 Foundationsinit()
方法。这正是我们建议您在 Angular 应用程序中使用 MDC Web 的方式。
归档时间: |
|
查看次数: |
1140 次 |
最近记录: |