Zhu xiaohang's blog

Vue的两大特性(组件篇)

Vue的两大特性(组件篇)

1.指令 -- 用来操作dom

2.组件 --组件是html css js等的一个聚合体

3.为什么要使用组件?

1.组件化

​ 思想:1.将一个具备完整功能的项目的一部分进行多处使用

​ 2.能加快项目的进度

​ 3.可以进行项目的复用

​ 2.要想实现组件化,那么我们使用的这一部分就必须是完整的,我们把这一完整的整体称 之为组件

​ 3.插件 : index.html img css js 分开的话会导致复用的麻烦

​ 4.如果能将 html css js img 等多个部分放在一起,那该多好,所以Vue将这个聚合体的文件称之为,单文件组件(xx.vue)

4.基础的组件创建

​ 1.全局创建(也叫全局注册)

​ 2.局部创建(局部注册)

<div id='app'></div>
<script>
	//Vue 是构造器函数
	//Vue.extend() 是 Vue用来扩展vue功能(组件)的
	console.log(Vue) //输出Vue的构造函数
	console.log(Vue.extend()) //输出VumComponent的构造函数  
	
	//Vue决定不进行实例化Vue.extend(), vue借鉴了react,react中组件是以标签的形式使用的,	
	//vue决定组件要以标签的形式呈现
	//为了符合html / html5的规则,所以组件的标签化使用必须注册,
	//注册说白了就是用来解析这个标签化的组件让html能识别的标签
	//总结: 组件使用前必须注册
	
	
	new Vue({
		el:'#app'
	})
	
</script>

全局注册

​ 组件必须先注册再使用(组件范围内使用),全局注册就是 只需要注册一次 可以多次使用(别的组件范围也可以使用)

//语法:  Vue.component(组件的名称,组件的配置项)
		//Vue.extend() 中有options参数
		//Vue()也有options参数  两个options基本一致

var Hello = Vue.extend({
	template:'<div>这里是father组件</div>'
})

Vue.component('Father',Hello)

new Vue({
	el:'#app'
})

全局组件简写形式:
	Vue.component('Father',{
		template:'<div>这里是father组件</div>'
	})

局部注册

​ 注意:

​ 命名:一个单词的大写:注意不要和原生的h5标签重名 比如header footer

​ 标签名字要小写 (如果标签大写的话需要带-)比如 header-title

​ 大驼峰:GaYa 使用 ga-ya

​ 局部注册:在组件中用一个components的配置项目来表示

​ 只能在注册的范围内使用,其他地方不能使用

<div>
	<gabriel-yan></gabriel-yan> //这里会输出  ‘这里是1903’
</div>

var Hello = Vue.extend({
	template:'<div>这里是1903</div>'
})

new Vue({
	el:'#app',
	components:{
		'gabriel-yan':hello
	}
})

局部组件简写形式:(在Vue下面的components中写)
  new Vue({
        el: '#app',
        components: {
            'Hello': {            //组件名
                template: '#hello'    //组件的结构
            }
        }

    })

组件的嵌套

父组件里面放子组件 类似于dom结构中的父子结构

将子组件以标签的形式放在父组件的模板中使用

切记 不要放在父组件内容中

错误的写法:
<div id='app'>
	<Father><Son></Son></Father>
</div>

正确写法:
<div id='app'>
	<Father></Father>
</div>

Vue.component('Father',{
	template:'<div>这里是father组件<Son></Son></div>'
})

Vue.component('Son',{
	template:'<div>这里是Son组件</div>'
})

嵌套局部写法

new Vue({
	el:'#app',
	components:{
		'Father':{
			template:'<div>这里是Father组件</div>'
			components:'Son':{
				template:'<div>这里是Son组件</div>'
			}
		}
	}
})

组件的一些特殊使用规则

<div id='app'>
	<table>
		<tr>
			<td>1</td>
			<td>2</td>
			<td>3</td>
		</tr>
	</table>
</div>


//is规则
	// ul>li	ol>li	table>tr>td		select>option
	//如上直属父子级如果直接组件以标签化形式使用,那么就会出现bug
	//解决 使用is规则:用过is属性来绑定一个组件
	// <tr is = "Hello"></tr>
	
Vue.component('Hello',{
	template:'<tr><td>1</td><td>2</td><td>3</td></tr>'
})
new Vue({
	el:'#app'
	
})

template使用:

​ 1.实例范围内使用

​ 2.实例范围外使用

/*

​ template使用:

​ \1. 实例范围内使用

​ template中的内容被当做一个整体了,并且template标签是不会解析到html结构中的

​ \2. 实例范围外使用

​ 实例范围外template标签是不会被直接解析的

​ 组件要想使用template使用,我们采用第二种

​ 但是使用第二种template使用后,有个弊端,template标签结构会在html文件中显示

​ 解决: 使用webpack、gulp等工具编译,将来要用vue提供的单文件组件

*/

实例范围内使用

 <div id="app">
    <h3> 实例范围内使用 </h3>
    <template>
      <div>
        <ul>
          <li>1</li>
          <li>2</li>
          <li>3</li>
        </ul>
      </div>
    </template>


    <h3> 使用 hello  组件</h3>

    <Hello></Hello>

  </div>
  
<script> 
    Vue.component('Hello',{
    template: '#hello'
  })

  new Vue({
    el: '#app'
  })
</script>

实例范围外使用

<h3> 实例范围外使用 </h3>
  <template id="hello">
    <div>
      <ul>
        <li>1</li>
        <li>2</li>
      </ul>
    </div>
  </template>
  
  
 <script>
 	Vue.component('Hello',{
    template: '#hello'
  })

  new Vue({
    el: '#app'
  })
 </script>

总结:1.Vue中有个Vue.extend()方法是用来扩展vue功能(组件)的

​ 2.组件的使用必须要先进行注册(防止和其他标签重名)

​ 3.两种注册方法 全局注册局部注册

​ 全局注册:直接用Vue全局的方法compontends

​ Vue.components('组件名',{

​ template:'内容'

​ })

​ 局部注册:在组件中用components的配置项目来表示(只能在注册范围内用)

​ new Vue({

​ el:'#app',

​ components:{内容}

​ })

posted @ 2019-06-24 16:55  mckk  阅读(3051)  评论(0编辑  收藏  举报