Vue入门到精通学习总结(七)

  • Vue组件
概念:组件是为了拆分Vue实例的代码量,让我们以不同的组件,来划分不同的功能模块,
我们需要什么样的功能,就去调用对应的组件。

组件化和模块化的区别:
模块化:是从代码逻辑的角度进行划分的,方便代码分层开发,保证每个功能模块的职能单一;
组件化:是从UI界面的角度进行划分的,前端的组件化方便UI组件的重用。
  • 全局组件定义的三种方式
1.使用Vue.extend配合Vue.component方法:

var login = Vue.extend({
	template:'<h1>登录</h1>'
})
Vue.component('login',login)

2.直接使用Vue.component方法:

Vue.component('register',{
	template:'<h1>注册</h1>'
})

3.将模板字符串,定义到script标签种:

<script id="tmpl" type="v-template">
	<div><a href="#">登录</a> | <a href="#">注册</a></div>
</script>

同时,需要使用Vue.component来定义组件:

Vue.component('account',{
	template:"#tmp1"
})

注意:组件中DOM结构,有且只能有唯一的根元素来进行包裹!

 

  • 组件中展示数据和响应事件
1.在组件中,data需要被定义为一个方法

Vue.component('account',{
	template:'#tmpl',
    data(){
    	return{
        	msg:'大家好!'
        }
    },
    methods:{
    	login(){
        	alert('点击登录按钮')
        }
    }
})

2.子组件中,如果将模板字符串,定义到了script标签中,那么
要访问子组件身上的data属性中的值,需要使用this来访问。

 

  • 父组件向子组件传值
1.父向子传值使用props

<script>
    // 创建 Vue 实例,得到 ViewModel
    var vm = new Vue({
      el: '#app',
      data: {
        msg: '这是父组件中的消息'
      },
      components: {
        son: {
          template: '<h1>这是子组件 --- {{finfo}}</h1>',
          props: ['finfo']
        }
      }
    });
  </script>
  
  2.使用v-bind或简化指令,将数据传递到子组件中:
  
  <div id="app">    
  	<son :finfo="msg"></son>
  </div>

 

  • 子组件向父组件传值
子向父传值使用$emit

<div id="app">
    <!-- 引用父组件 -->
    <son @func="getMsg"></son>

    <!-- 组件模板定义 -->
    <script type="x-template" id="son">
      <div>
        <input type="button" value="向父组件传值" @click="sendMsg" />
      </div>
    </script>
  </div>

  <script>
    // 子组件的定义方式
    Vue.component('son', {
      template: '#son', // 组件模板Id
      methods: {
        sendMsg() { // 按钮的点击事件
          this.$emit('func', 'OK'); // 调用父组件传递过来的方法,同时把数据传递出去
        }
      }
    });

    // 创建 Vue 实例,得到 ViewModel
    var vm = new Vue({
      el: '#app',
      data: {},
      methods: {
        getMsg(val){ // 子组件中,通过 this.$emit() 实际调用的方法,在此进行定义
          alert(val);
        }
      }
    });
  </script>

 

  • Vue中的路由
什么是路由?

1. 对于普通的网站,所有的超链接都是URL地址,所有的URL地址都对应服务器上对应的资源;

2. 对于单页面应用程序来说,主要通过URL中的hash(#号)来实现不同页面之间的切换,
同时,hash有一个特点:HTTP请求中不会包含hash相关的内容;所以,单页面程序中的页面跳转主要用hash实现;

3. 在单页面应用程序中,这种通过hash改变来切换页面的方式,称作前端路由(区别于后端路由);
  • 在Vue中使用vue-router(路由)

1.导入vue-router组件类库

<!-- 1. 导入 vue-router 组件类库 -->
  <script src="./lib/vue-router-2.7.0.js"></script>

2.使用 router-link 组件来导航

<!-- 2. 使用 router-link 组件来导航 -->
<router-link to="/login">登录</router-link>
<router-link to="/register">注册</router-link>

3.使用 router-view 组件来显示匹配到的组件

<!-- 3. 使用 router-view 组件来显示匹配到的组件 -->
<router-view></router-view>

4.创建使用Vue.extend创建组件

  // 4.1 使用 Vue.extend 来创建登录组件
    var login = Vue.extend({
      template: '<h1>登录组件</h1>'
    });

    // 4.2 使用 Vue.extend 来创建注册组件
    var register = Vue.extend({
      template: '<h1>注册组件</h1>'
    });

5,创建一个路由 router 实例,通过 routers 属性来定义路由匹配规则

// 5. 创建一个路由 router 实例,通过 routers 属性来定义路由匹配规则
    var router = new VueRouter({
      routes: [
        { path: '/login', component: login },
        { path: '/register', component: register }
      ]
    });

6.使用 router 属性来使用路由规则

// 6. 创建 Vue 实例,得到 ViewModel
    var vm = new Vue({
      el: '#app',
      router: router // 使用 router 属性来使用路由规则
    });

注意:在路由规则中定义参数

1.在规则中定义参数:
{ path: '/register/:id', component: register }

2.通过 this.$route.params来获取路由中的参数:
var register = Vue.extend({
      template: '<h1>注册组件 --- {{this.$route.params.id}}</h1>'
});
  • watchcomputedmethods之间的对比
1. computed属性的结果会被缓存,除非依赖的响应式属性变化才会重新计算。主要当作属性来使用;
2. methods方法表示一个具体的操作,主要书写业务逻辑;
3. watch一个对象,键是需要观察的表达式,值是对应回调函数。主要用来监听某些特定数据的变化,
从而进行某些具体的业务逻辑操作;可以看作是computed和methods的结合体;

 

posted @ 2021-08-22 20:21  会飞的猪礼  阅读(91)  评论(0)    收藏  举报