Vue框架 - 如何处理UI界面的重用(Vue组件)

处理UI界面的重用(Vue组件)

组件系统是 Vue 的另一个重要概念,它是一种抽象,允许我们使用小型、独立和通常可复用的组件构建大型应用,因此几乎任意类型的应用界面都可以看成一个组件树。

组件注册

  • 根组件: 通过 new Vue() 来实例化的,通常只有一个
  • 可复用性组件: 通过 Vue.component() 来创建
    组件分为全局组件,局部组件
全局注册

通过 component 来实现注册
只要是新实例化对象就能调用 k-div
可复用性组件

  • js准备
	Vue.component("k-div",{
		template:`
        	<div>
            	<div>hello</div>
                <div>world</div>
			</div>
		`
	})
	let app = new Vue({
		el:"#app"
	});
  • HTML调用
	<div id="app">
        <k-div> </k-div>
    </div>
  • 页面显示结构
    在这里插入图片描述
局部注册

注意 通过属性名 components 来实现
全局注册时没有 s
这种注册的方式,只允许在 app变量代表的区域内使用 k-div

  • js准备
    let app = new Vue({
		el:"#app",
		// 局部注册可复用性组件的方式 有 s
		components:{
			"k-div":{
				template:`
					<div>
						<div>hello</div>
						<div>world</div>
					</div> 
				`,
			}
		}
	});
  • HTML调用
	<div id="app">
        <k-div> </k-div>
    </div>
  • 页面结构
    在这里插入图片描述
组件嵌套

全局组件嵌套

  • 代码实现
	Vue.component("k-div",{
		template:`
        	<div>
            	<div>hello</div>
            	<p-p-t></p-p-t>
                <div>world</div>
			</div>
		`,
		components:{
	        'p-p-t':{
                // 只允许存在一个总标签
                template:`
        			<div>
                        <p>我是你需要仰望的约德尔人</p>
                        <span>测试结果嵌套</span>
        			</div>
        		`
        	}
        }
	})
	
	let app = new Vue({
		el:"#app"
	});
  • 页面结构
    在这里插入图片描述
    局部组件嵌套
  • 代码实现
    let app = new Vue({
		el:"#app",
		// 局部注册可复用性组件的方式 有 s
		components:{
			"k-div":{
				template:`
					<div>
						<div>hello</div>
						<p-p-t></p-p-t>
						<div>world</div>
						<p-p-t></p-p-t>
					</div> 
				`,
				components:{
	                'p-p-t':{
                    	template:`
                        	<h3>你好,世界</h3>
						`
					}
				}
			}
		}
	});
  • 页面结构
    在这里插入图片描述

组件数据

组件内部的数据是各自独立的,为维持数据的独立性
组件内部的数据写成函数的形式
data:function(){ return { 对象形式 } }

  • 代码结构
	<div id="app">
        <k-div> </k-div>
    </div>
    <script>
		Vue.component("k-div",{
            template:`
                <div>
                    <div>hello</div>
                    <div>world</div>
                    <p>{{name}}</p>
                </div>
            `,
            data:function(){
                return {
                	// 使用的是这里的 name 
                    name:"kids"
                }
            }
        })
        
        let app = new Vue({
            el:"#app",
            data:{
                // 这里的 name 并不没有被使用
                name:"father"
            }
        });
	</script>
  • 页面效果
    在这里插入图片描述

组件传参

父传子
  • 父组件传递数据
    使用 v-bind 绑定属性的方式,绑给子组件调用时的标签
    <k-div :height="175" :msg="txt" > </k-div>
  • 子组件接收数据
    在子组件的内部使用props属性,以数组的形式接收
    props:["height","msg"]
  • 代码实现
    <div id="app">
        <p v-text="name"></p>
        <!-- 父组件 传递  使用 v-bind 绑定属性的方式 -->
        <k-div :height="175" :msg="txt" > </k-div>
    </div>

    <script>

        // 可复用性组件的全局注册 
        Vue.component("k-div",{
            // 子组件 接收  使用 props
            // props: 使用存储数据,
            //  组件内部数据的使用方式和 data 一致
            props:["height","msg"],
            template:`
                <div>
                    <div>hello</div>
                    <div>world</div>
                    <hr/>
                    <span>接收的信息{{height}}-{{msg}}</span>
                </div>
            `,
           data:function(){
               return {
                   name:`子组件的name:kids`
               }
           }
        })

        let app = new Vue({
            el:"#app",
            data:{
                name:`父组件的name:father`,
                txt:"父组件的文本信息"
            }
        });
    </script>

在这里插入图片描述

子传父
  • 子组件传递数据
    在特定条件下,触发自定义事件来通知父组件
  • 父组件接收数据
    父组件在接收到通知后,自行决定是否修改数据
    在这里插入图片描述
  • 代码实现
    <div id="app">
        <k-div @victory-on="fn"></k-div>
        <p> 接收的数据:{{text}} </p>
    </div>

    <script>
        Vue.component("k-div",{
            template:`
                <div>
                    <div>hello</div>
                    <div>world</div>
                    <button @click="goOn">点击</button>
                    {{name}}
                </div>
            `,
           data:function(){
               return {
                   name:`子组件的name:kids`
               }
           },
           methods:{
                goOn(){
                    // 不允许出现 大写 监听名称 这里的名称
                    //  与 挂载点处的点击事件名称必须一致
                    this.$emit("victory-on",this.name)
                }
           }
        })

        let app = new Vue({
            el:"#app",
            data:{
                name:`父组件的name:father`,
                text:"测试文本信息"
            },
            methods:{
                fn:function(item){
                    console.log(item)
                    this.text = item;
                }
            }
        });
    </script>
  • 页面效果
    在这里插入图片描述
两种方式的区别
  • 父 => 子
    父组件调用子组件,通过子组件的属性传输数据
    子元素内部通过 props 配置项(数组形式),来接收对应的数据
  • 子 => 父
    vue中的数据默认的单向流动,只能父到子直接传递,但是子到父不能直接改
    因为父级的数据,不一定只是某个子组件使用 或许还有其他的组件使用
    子组件随意修改父组件数据很容易混乱
  • 子组件想修改数据
    子组件执行 $emit() 来触发自定义事件
    (自定义名称 不允许出现大写)
    父组件监听 子组件触发的自定义事件
    监听触发 执行父级的回调函数
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue3是一种流行的JavaScript框架,用于构建界面。Element UI是一个基于VueUI组件库,提供了丰富的可重用组件,可以用于构建漂亮的登录界面。 在Vue3中使用Element UI构建登录界面,你可以按照以下步骤进行: 1. 首先,确保你已经安装了Vue3和Element UI。你可以通过npm或yarn来安装它们。 2. 创建一个Vue组件,用于表示登录界面。你可以在组件中使用Element UI提供的各种组件来构建界面,例如输入框、按钮等。 3. 在组件的模板中,使用Element UI组件来构建登录表单。例如,你可以使用el-input组件来创建用户名和密码输入框,使用el-button组件来创建登录按钮。 4. 在组件逻辑部分,你可以定义数据和方法来处理用户的输入和登录操作。例如,你可以使用data属性来定义用户名和密码的数据,使用methods属性来定义处理登录操作的方法。 5. 最后,将该组件渲染到页面上的某个元素中,以显示登录界面。 下面是一个简单的示例代码,展示了如何使用Vue3和Element UI创建一个登录界面: ```vue <template> <div> <el-input v-model="username" placeholder="请输入用户名"></el-input> <el-input v-model="password" placeholder="请输入密码" type="password"></el-input> <el-button type="primary" @click="login">登录</el-button> </div> </template> <script> import { ref } from 'vue'; export default { setup() { const username = ref(''); const password = ref(''); const login = () => { // 处理登录逻辑 }; return { username, password, login, }; }, }; </script> ``` 这是一个简单的登录界面示例,其中使用了el-input组件和el-button组件来创建输入框和登录按钮。在逻辑部分,使用了Vue3的Composition API来定义数据和方法。 希望这个示例能帮助你了解如何使用Vue3和Element UI创建登录界面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值