美文网首页
自定义组件和标签

自定义组件和标签

作者: 白水螺丝 | 来源:发表于2016-11-25 10:48 被阅读92次

组件是一个强大的,干净的方式组织您的UI代码变成自包含,可重复使用的块。 他们有以下的好处:

  • 可以表示单独的控件/窗口小部件,或应用程序的整个部分
  • 包含自己的视图,通常(但可选)自己的viewmodel
  • 可以通过AMD或其他模块系统预加载或异步加载(按需)
  • 可以接收参数,并可选地将更改写回到它们或调用回调
  • 可以组合在一起(嵌套)或继承自其他组件
  • 可以轻松地打包,以便跨项目重用
  • 让你定义自己的约定/逻辑进行配置和加载

此模式有利于大型应用程序,因为它通过明确的组织和封装简化了开发,并通过根据需要增量式加载应用程序代码和模板来帮助提高运行时性能。
自定义元素是用于消费组件的可选但方便的语法。 不需要使用绑定注入组件的占位符<div>,您可以使用具有自定义元素名称的更多自描述标记(例如,<voting-button>或<product-editor>)。 Knockout小心确保兼容性,即使与旧的浏览器,如IE 6。

示例:喜欢/不喜欢小部件

可以使用ko.components.register注册组件(技术上,注册是可选的,但它是最简单的入门方式)。 组件定义指定一个viewModel和模板。 例如:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>组件与自定义标签</title>
<script type="text/javascript" src="js/jquery-1.11.3.js"></script>
<script type="text/javascript" src="js/knockout.3.4.1.js"></script>
</head>
<body>

<div id="test">
    <div data-bind='component: {
        name: "like-widget",
        params: { value: like }
    }'></div>
</div>


<script type="text/javascript">
ko.ob = ko.observable;
ko.oba = ko.observableArray;

//注册一个组件
ko.components.register('like-widget', {
    template:
        '<div class="like-or-dislike" data-bind="visible: !chosenValue()">\
            <button data-bind="click: like">Like it</button>\
            <button data-bind="click: dislike">Dislike it</button>\
        </div>\
        <div class="result" data-bind="visible: chosenValue">\
            You <strong data-bind="text: chosenValue"></strong> it\
        </div>'

    ,viewModel: function(params) {
        var _this = this;
        this.chosenValue = params.value;
        _this.like = function() {
            _this.chosenValue('like');
        }
        _this.dislike = function() {
            this.chosenValue('dislike');
        }.bind(_this);
    }
});
var vm = {
    like:ko.ob(false)
}
ko.applyBindings(vm,$("#test").get(0));

</script>
</body>
</html>

根据需要从外部文件加载类似/不喜欢小部件

在大多数应用程序中,您需要将组件视图模型和模板保留在外部文件中。 如果将Knockout配置为通过AMD模块加载器(如require.js)提取它们,则可以预加载(可能捆绑/压缩)或根据需要逐步加载。

ko.components.register('like-or-dislike', {
    viewModel: { require: 'files/component-like-widget' },
    template: { require: 'text!files/component-like-widget.html' }
});

为了这个工作,文件files / component-like-widget.js和files / component-like-widget.html需要存在。 检查出来(并查看源代码上的.html) - 正如你将看到的,这是更清洁和更方便,包括定义中的内联代码。

此外,您需要引用一个合适的模块加载器库(例如require.js)或实现一个知道如何抓取您的文件的自定义组件加载器。

总结

  • 在knockout里viewmodel只能绑定到一个dom节点上,该节点本身或者节点的内部子节点都不能再继续绑定viewmodel,即,不能再继续使用ko.applyBindings方法
  • 按照上诉的理论,虽然不能再次绑定viewmodel,但是一个viewmodel里面是可以存在多个knockout组件,即 自定义标签。每个自定义标签也相当于一个viewmodel,而且最外层根viewmodel可以通过参数的传递给各个自定义组件的viewmodel来达到相互绑定,改变UI的方法。

相关文章

  • 微信小程序自定义标签组件component封装、组件生命周期,组

    微信小程序自定义标签组件component封装、组件生命周期,组件通信 本文来说下小程序的自定义标签组件封装。相比...

  • vue系列笔记(三)------vue组件

    一 、组件基础(组件就是自定义标签) 1 定义组件名称 (1) 当使用 kebab-case (...

  • Vue组件通信方法总结

    父传子父组件通过自定义属性给子组件传值,子组件用props接收 子传父父组件在子组件标签上自定义事件,子组件通过$...

  • 自定义组件和标签

    组件是一个强大的,干净的方式组织您的UI代码变成自包含,可重复使用的块。 他们有以下的好处: 可以表示单独的控件/...

  • 49-Vue路由基本配置

    这里自定义路由切换的标签和标签样式,设置切换动画,以及默认页面的显示组件 https://router.vuejs...

  • Class5 v-model使用和实现

    v-model一般用于input标签的值绑定和值变化通知 等价 自定义显示v-model组件功能 父组件 子组件...

  • 小记

    小程序 自定义组件 在组件wxss中不应使用ID选择器、属性选择器和标签名选择器。

  • (九)Component标签

    本节知识点 组件标签 模板标签用的`` 概述 标签是vue自定义的标...

  • (六)Component初识组件

    本节知识点 组件识vue的核心,必须要学好。组件就是自定义标签。这些标签在HTML中是没有的比如

  • uni-app 自定义组件样式问题 #shadow-root

    描述: 使用uni-app编译自定义组件后,组件不仅多嵌套一层标签,并且在组件最外层的样式并没有作用到该标签上,导...

网友评论

      本文标题:自定义组件和标签

      本文链接:https://www.haomeiwen.com/subject/cdmipttx.html