zoukankan      html  css  js  c++  java
  • Vue的组件化

    Vue的组件化

    组件:

    将一个页面复杂的逻辑拆分成一个个小小的功能块,每个功能块都能完成属于自己部分的独立的功能,那么之后整个页面的管理和维护就会变得非常容易

    Vue组件化思想:

    它提供了一种抽象,让我们可以开发出一个个独立的可复用的小组件来构造我们的应用

    任何应用都会被抽象成一颗组件树

    组件化思想应用:

    有了组件化思想,我们在之后开发中就要充分利用它

    尽可能将页面拆分成一个个小的,可复用的组件

    这样让我们的代码更加方便组织和管理,并且扩展性也更强

    注册组件的基本步骤:

    • 组建的注册分成三个步骤

      • 创建组件构造器:调用Vue.extend()方法
      • 注册组件:调用Vue.component()方法
      • 在Vue实例的作用和范围内使用组件
    	<div id="app">
    			<!-- 在Vue实例作用域使用组件 -->
    			<my-cpn></my-cpn>
    		</div>
    
    		<script src="js/vue.js" ></script>
    		<script>
    			//1.创建组件构造器对象
    			const cpnC = Vue.extend({
    				template:`
    				<div>
    				<h2>title</h2>
    				<p>hello world</p>
    				<p>hello Vue</p>
    				</div>`
    			})
    			//2.注册组件
    			Vue.component('my-cpn', cpnC)
    			const app = new Vue({
    				el: "#app",
    				data: {
    					message: "你好"
    				}
    			})
    		</script>
    

    全局组件和局部组件:

    之前介绍的组件注册使用方法创建的都是全局组件,若要创建局部组件,只需将注册步骤放到需要局部使用的Vue实例对象中声明就可以了

    const app = new Vue({
    				el: "#app",
    				data: {
    					message: "你好"
    				},
    				components: {
    					'my-cpn': cpnC 
    				}
    			})
    

    父组件和子组件:

    *注:组件的作用域只能包括在所注册的组件内部

    注册组件的语法糖:

     //注册组件语法糖写法
    
            Vue.component('cpn1', {
                template:`
                <div>
                    <h2>这是组件-1</h2>
                    <p>hello world</p>
                    <p>hello Vue</p>
                </div>`
            })
            
            //root组件
            const app = new Vue({
                el: "#app",
                data: {
                    message: "你好"
                },
                components: {
                    //局部组件注册语法糖
                    'cpn2': {
                    template:`
                    <div>
                        <h2>这是组件-2</h2>
                        <p>hello world</p>
                        <p>hello Vue</p>
                    </div>`
                    }
                }
            })
    

    组件模板抽离的写法:

    刚才我们通过语法糖简化了注册组件过程,另外还有一个地方写法比较麻烦,那就是template模板的写法。

    如果我们能将其中HTML分离出来写,然后挂载到对应组件上,必然结构会变得更清晰

    Vue提供了两种方案来定义HTML模板内容:

    使用script标签

    使用template标签

    <!-- 组件模板的分离写法 -->
        <!-- 1. script标签,注意:类型必须是text/x-template -->
        <script type="text/x-template" id="cpn">
            <div>
                <h2>我是标题2</h2>
                <p>我是内容,哈哈哈哈哈</p>
            </div>
        </script>
    
        <!-- 2. template标签 -->
        <template id="cpn">
            <div>
                <h2>我是标题2</h2>
                <p>我是内容,哈哈哈哈哈</p>
            </div>
        </template>
    
        <script src="js/vue.js" ></script>
        <script>
            Vue.component('cpn1', {
                template:`#cpn`
            })
            
            //root组件
            const app = new Vue({
                el: "#app",
                data: {
                    message: "你好"
                }
            })
        </script>
    </body>
    

    组件可以访问Vue实例的数据吗?

    答案是不能。

    • 组件是一个单独功能模块的封装
      • 这个模板有属于自己的HTML模型,也应该有属于自己的数据data。

    组件自己的数据存放到哪儿了呢?

    • 组件对象也有一个data属性(也可以有methods等属性)
    • 只是这个data属性必须是一个函数
    • 而且这个函数返回一个对象,对象内部保存着数据

    若组件多次使用,那么这几个组件是否共用一个data呢?

    答案也是不。

    • 每个组件data返回的函数都开辟了一个新的空间,创建了一个新的对象将data的返回值赋给其新建对象。
    • 组件中的数据data用函数来表示就是为了达到组件复用数据互不干扰
      //组件中数据data用return返回来表示          
    	data() {
                    return {
                        count: 0
                    }
                }
    
  • 相关阅读:
    Parameter Binding in ASP.NET Web API
    Which HTTP methods match up to which CRUD methods?
    ErrorHandling in asp.net web api
    HttpStatusCode
    Autofac Getting Started(默认的构造函数注入)
    Autofac Controlling Scope and Lifetime
    luvit 被忽视的lua 高性能框架(仿nodejs)
    undefined与null的区别
    VsCode中使用Emmet神器快速编写HTML代码
    字符串匹配---KMP算法
  • 原文地址:https://www.cnblogs.com/potatolulu/p/13220393.html
Copyright © 2011-2022 走看看