Vue(四)

组件:

Vue中的组件主要用于提高代码的复用性、‌模块化、‌可维护性、‌可扩展性,‌并增强开发效率。‌

提高代码复用性和模块化:‌

组件是Vue中的一个重要概念,‌它们是可复用的Vue实例,‌拥有独一无二的组件名称。‌通过扩展HTML元素,‌组件可以以自定义的HTML标签形式出现,‌从而将代码组织成较小的、‌易于管理的块。‌这种方式允许开发人员将复杂的应用程序分解为更易于管理的部分,‌减少重复代码,‌提高可维护性。‌

增强可扩展性和开发效率:‌

组件允许创建可扩展且松散耦合的应用程序。‌新功能和特性可以通过添加新组件或修改现有组件轻松添加,‌而无需修改整个应用程序。‌使用预构建的组件,‌开发人员可以专注于应用程序的业务逻辑,‌而不是重复创建通用UI元素,‌从而缩短开发时间并提高生产力。‌

创建动态UI:‌

组件具有响应性和动态更新的能力。‌它们可以接受输入,‌响应事件,‌并渲染基于状态变化的用户界面。‌这允许创建交互式且动态的应用程序。‌

增强可测试性和可维护性:‌

组件封装了特定和孤立的功能,‌使得它们更易于测试和维护。‌开发人员可以专注于测试单个组件,‌而不必担心其对应用程序其他部分的影响。‌此外,‌组件化开发还提供了更好的组织结构,‌使得代码结构更加清晰,‌易于管理和维护。‌

支持可移植性和团队协作:‌

组件化开发有助于提高应用程序的可移植性,‌促进团队协作。‌通过将不同的功能模块分别封装成组件,‌可以减少代码复杂性和维护成本

组件在实例中展示:

这是一个全局的父组件

<div id = "app">
  <zujian></zujian>
</div>

实例与组件之间的数据不互通

实例和组件之间的数据是不互通的,

组件的数据一般只能在组件中使用

<body>
    <div id = "app">
        <child></child>
    </div>
    <template id="child">
        <div>
            <div>{{str}}</div>
            <div v-for = "item in arr" :key="item">
                <div>{{item}}</div>
            </div>
        </div>
    </template>
</body>

<script>
    let vm = new Vue({
        data(){
            return {

            }
        },
        components:{
            "child":{
                template:"#child",
                data(){
                    return{
                        str:"这是子组件",
                        arr:["哈哈哈哈","和嘿嘿","喂喂喂"]
                    }
                }
            }
        }
    })
    vm.$mount("#app");
</script>

组件之间的复用

父组件与子组件(局部组件)

<script>
    let vm = new Vue({
        data(){
            return {

            }
        },
        components:{
            "child":{
                template:"#child",
                data(){
                    return{
                        str:"这是子组件",
                        arr:["哈哈哈哈","和嘿嘿","喂喂喂"]
                    }
                }
            }
        }
    })
    vm.$mount("#app");
</script>

实例是顶级父组件,实例里面的组件和实例的关系就是父子组件

父子组件传递数据

父组件像子组件传递的数据,可以使用正向传递:

<body>
    <div id="app">
        <zujian :zufuchuan="str" :zifuchuan2="str2"></zujian>
      //传递数据的地方
    </div>
    <template id="zujian">
        <div>
            <div>{{zufuchuan}}</div>
            <div>{{zifuchuan2}}</div>
        </div>
    </template>
</body>

这里在实例中,zujian这里,用来接受实例传递的数据,并在子组件中用props数组接收,这样这个数据就可以用了

<script>
    let vm = new Vue({
        data(){
            return{
                str:"氨基酸覅偶阿萨德否",
                str2:"hi家覅殴打撒女iowj"
            }
        },
        components:{
            "zujian":{
                template:"#zujian",
                data(){
                    return {

                    }
                },
                props:["zufuchuan","zifuchuan2"]
              //接收数据的地方
            }
        }
    })
    vm.$mount("#app");
</script>

用props数组接受数据

子组件向父组件传递数据,不支持

子组件向父组件传递数据

子组件无法直接向父组件传递数据

需要先定义一个run()方法,把数据通过视图模板传递给父组件,父组件写一个methods的fun()监听方法,接收子组件的值,拿到之后,在自己的data中写出来,才能用。

<body>
    <div id="app">
        <div>子组件传递过来的数据:{{ziStr}}</div>
        <parent @event="fun"></parent>
    </div>
    <template id="parent">
        <div>
            <button @click="run">子组件像父组件传递数据</button>
        </div>
    </template>
</body>

<script src="../js/vue.min.js"></script>
<script>
    Vue.component("parent",{
        template:"#parent",
        data(){
            return{
                str:"子组件中的数据"
            }
        },
        methods:{
          //传给父组件
            run(){
                this.$emit('event',this.str);
            }
        }
    })
    let vm = new Vue({
        data(){
            return {
                ziStr:""
              //定义出来才能用
            }
        },
        methods:{
          //接收
            fun(value){
                console.log("value::",value);
                this.ziStr = value;
            }
        }
    })
    vm.$mount("#app")
</script>

局部路由

常用于侧边栏或着导航栏中

<body>
    <div id="app">
        <ul>
            <li>
                <router-link to="/tianmao">天猫</router-link>
            </li>
            <li>
                <router-link to="/taobao">淘宝</router-link>
            </li>
            <li>
                <router-link to="/jingdong">京东</router-link>
            </li>
        </ul>
        <router-view></router-view>
    </div>
    <template id="tianmao">
        <div>
            <h2>田毛毛</h2>
            <h2>田毛毛</h2>
            <h2>田毛毛</h2>
            <h2>田毛毛</h2>
            <h2>田毛毛</h2>
        </div>
    </template>
    <template id="taobao">
        <div>
            <h2>田毛毛1</h2>
            <h2>田毛毛1</h2>
            <h2>田毛毛1</h2>
            <h2>田毛毛1</h2>
            <h2>田毛毛1</h2>
        </div>
    </template>
    <template id="jingdong">
        <div>
            <h2>田毛毛2</h2>
            <h2>田毛毛3</h2>
            <h2>田毛毛3</h2>
        </div>
    </template>
</body>

需要导入router包

<script src="../js/vue-router.js"></script>

<script>
    let vm = new Vue({
        data(){
            return{

            }
        },
        router: new VueRouter({
            routes:[
                {
                  //这个是根路径,也就是刚进页面访问的数据
                    path:"/",
                    component:{
                        template:"#tianmao"
                    }
                },
                {
                    path:"/tianmao",
                    component:{
                        template:"#tianmao"
                    }
                },
                {
                    path:"/taobao",
                    component:{
                        template:"#taobao"
                    }
                },
                {
                    path:"/jingdong",
                    component:{
                        template:"#jingdong"
                    }
                },
            ]
        })
    })
    vm.$mount("#app");
</script>
相关推荐
黑客老陈1 小时前
新手小白如何挖掘cnvd通用漏洞之存储xss漏洞(利用xss钓鱼)
运维·服务器·前端·网络·安全·web3·xss
正小安1 小时前
Vite系列课程 | 11. Vite 配置文件中 CSS 配置(Modules 模块化篇)
前端·vite
编程百晓君1 小时前
一文解释清楚OpenHarmony面向全场景的分布式操作系统
vue.js
暴富的Tdy1 小时前
【CryptoJS库AES加密】
前端·javascript·vue.js
neeef_se1 小时前
Vue中使用a标签下载静态资源文件(比如excel、pdf等),纯前端操作
前端·vue.js·excel
m0_748235611 小时前
web 渗透学习指南——初学者防入狱篇
前端
℘团子এ1 小时前
js和html中,将Excel文件渲染在页面上
javascript·html·excel
z千鑫2 小时前
【前端】入门指南:Vue中使用Node.js进行数据库CRUD操作的详细步骤
前端·vue.js·node.js