第3章 *组件-生命周期(2)

参考网址
官网:https://cn.vuejs.org/v2/api/#Vue-component
https://www.jianshu.com/p/0cfff4a2f226
https://www.jb51.net/article/140581.htm
注意事项:template中的html最外层必须有一个根节点

目标

  • 组件
  • 生命周期

组件

我的理解:组件类似java中的类(封装)
组件(Component)是 Vue.js 最强大的功能之一。
注意,在 Vue2.0 中,代码复用和抽象的主要形式是组件。
组件可以扩展 HTML 元素,封装可重用的代码,减少重复劳动。
组件系统让我们可以用独立可复用的小组件来构建大型应用,几乎任意类型的应用的界面都可以抽象为一个组件树:
注册一个全局组件语法格式如下:
Vue.component(tagName, options)
tagName 为组件名,options 为配置选项。注册后,我们可以使用以下方式来调用组件:
<tagName></tagName>

全局组件

所有实例都能用全局组件。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Vue 测试实例 </title>
<script src="js/vue.min.js"></script>
</head>
<body>
<div id="app">
    <runoob></runoob>
</div>
<div id="app2">
    <runoob></runoob>
</div>
<script>
// 注册
Vue.component('runoob', {
  template: '<h1>自定义组件!<br><span>换行后内容</h1>'
})
// 创建根实例
new Vue({
  el: '#app'
})
// 创建根实例
new Vue({
  el: '#app2'
})
</script>
</body>
</html>

局部组件

我们也可以在实例选项中注册局部组件,这样组件只能在这个实例中使用:
如下例子,app2中访问不到runoob组件

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Vue 测试实例 - 菜鸟教程(runoob.com)</title>
<script src="js/vue.min.js"></script>
</head>
<body>
<div id="app">
    <runoob></runoob>
</div>
<div id="app2">
    <runoob></runoob>
</div>
<script>
// 创建根实例
new Vue({
  el: '#app',
  components: {
// <runoob> 将只在父模板可用
'runoob': {template: '<h1>自定义组件!</h1>'}
  }
})
</script>
</body>
</html>

template方式创建

上面的创建方式把html直接做为字符串写到template里,不方便看效果和调试,所以可以把html部分的内容抽取到body里面,包到<template> </template>之间,并可以为template指定唯一的id,js中就可以通过引用id把模板内容包含进来了
示例:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Vue 测试实例 - 菜鸟教程(runoob.com)</title>
        <script src="js/vue.min.js"></script>
    </head>
    <body>
        <div id="app">
            <runoob></runoob>
        </div>
        <div id="app2">
            <runoob></runoob>
        </div>
        <template id="mytemp">
            <h1>自定义组件!<br><span>换行后内容</h1>
        </template>
        <script>
            // 创建根实例
            new Vue({
                el: '#app',
                components: {
                    // <runoob> 将只在父模板可用
                    'runoob': {
                        template: '#mytemp'
                    }
                }
            })
        </script>
    </body>
</html>
image.png

更先进的方式(先了解,上脚手架后会应用)

上面是一个最简单的注册例子,但是实际上我们并不会这么用。将来用vue-cli脚手架搭架后,我们会单独创建一个vue文件来封装一个组件。
在其他需要的地方用import ... from ...引用,类似java中类的引用

参考网址:https://www.jb51.net/article/146223.htm

生命周期详解

https://cn.vuejs.org/v2/guide/instance.html#%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F%E5%9B%BE%E7%A4%BA

https://www.php.cn/vuejs/463882.html

<body>
    <div id="content">
        信息:{{msg}}
    </div>
    <script type="text/javascript">
        let vue=new Vue({
            el:'#content',
            data:{
                msg:'old msg'
            },
            beforeCreate:function(){
                alert("beforeCreate");
            },
            created:function(){
                alert("created");
            },
            beforeMount:function(){
                alert("beforeMount");
            },
            mounted:function(){
                alert("mounted");
            },
            beforeUpdate:function(){
                alert("beforeUpdate");
            },
            updated:function(){
                alert("updated");
            }
        });
        setTimeout(function(){
            vue.msg="change......";
        },3000)
    </script>
</body>

例子(根据后台数据加载列表框的值):

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script src="js/vue.min.js"></script>
    </head>
    <body>
        <div id="content">
            <template v-for="item in chks">
                <input type="checkbox"  name="hobby1" :value="item.id" :checked="chkvar.indexOf(item.id) > -1" />{{item.name}}
            </template>
             <br>
             <select multiple> 
            <!-- <select v-model="selectid" >单选-->
                <template v-for="item in chks">
                    <option type="checkbox" name="hobby2" :value="item.id" :selected="chkvar.indexOf(item.id) > -1">{{item.name}}
                    </option>
                </template>
            </select>
           
        </div>
        <script>
            var vue = new Vue({
                el: '#content',
                data: {
                    chks: [{
                            id: 1,
                            name: "吃饭"
                        },
                        {
                            id: 2,
                            name: "睡觉"
                        },
                        {
                            id: 3,
                            name: "打豆豆"
                        },
                        {
                            id: 4,
                            name: "唱歌"
                        },
                        {
                            id: 5,
                            name: "学习"
                        }
                    ],
                    chkvar: '',
                    selectid:2
                },
                mounted: function() {
                    var arr = [1, 2, 4] //假设这是被选中的爱好
                    this.chkvar = arr
                }
            })
        </script>
    </body>
</html>

Vue目前学到的属性

  • el
  • data
  • methods
  • computed
  • watch
  • filters
  • components
  • beforeCreate:
  • created
  • beforeMounted
  • mounted
  • beforeUpdated
  • updated 等
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 基于Vue的一些资料 内容 UI组件 开发框架 实用库 服务端 辅助工具 应用实例 Demo示例 element★...
    尝了又尝阅读 1,187评论 0 1
  • Vue2.0+组件库总结 UI组件 element - 饿了么出品的Vue2的web UI工具套件 Vux - 基...
    szch阅读 1,985评论 1 52
  • UI组件 element - 饿了么出品的Vue2的web UI工具套件 Vux - 基于Vue和WeUI的组件库...
    卞卞村长L阅读 1,768评论 0 8
  • UI组件 element- 饿了么出品的Vue2的web UI工具套件 Vux- 基于Vue和WeUI的组件库 m...
    小姜先森o0O阅读 9,691评论 0 72
  • UI组件 element- 饿了么出品的Vue2的web UI工具套件 Vux- 基于Vue和WeUI的组件库 m...
    流觞小菜鸟阅读 1,854评论 2 8