web前端vueVue

02、Vue-基础学习

2017-07-19  本文已影响1136人  EndEvent

一、模版指令

通过模版指令(写在html中的),即是html和vue对象的粘合剂。

  <div id="app">
    {{ message }}
  </div>
var app = new Vue({
  el: '#app',
  data: {
    message: 'Hello Vue!'
  }
})

v-text更新元素的 textContentv-html更新元素的 innerHTML,内容按普通 HTML 插入,不会作为 Vue 模板进行编译。如果想要title: 'TOMVC <sub>2.0</sub>'不以字符串形式显示,就可以使用v-html, <h2 v-html='title'></h2>

  <div id="view">
    <p v-if='isShow'></p>
    <p v-show='isShow'></p>
</div>
new Vue({
    el: '#view',
    data: {
      isShow: true
    }
 });

v-if是直接不渲染该元素; v-show是通过display: none进行隐藏;

    <ul class="view">
        // 遍历数组,取出每个元素
        <li v-for='item in list'>
            {{item.text}}
        </li>
    </ul>
<script>
    var app = new Vue({
        el: '.view',
        data: {
            list: [  // 数组
                {text: '01、HTML'},
                {text: '02、CSS'},
                {text: '03、JavaScript'}
            ]
        }
    });
</script>
<div id="view4">
    <input type="button" value="按钮" v-on:click='doThis' />
    // 简写
    <input type="button" value="按钮" @click='doThis' />
</div>
<script>
  new Vue({
    el: '#view4',
    methods: {
      doThis: function(){
        alert('hello');
      }
    }
});
</script>
<div id="view">
    ![](imgSrc)
    ![](imgSrc)
    <p :class='InfoClass'></p>
</div>
<script>
new Vue({
  el: '#view',
  data: {
    imgSrc: 'm_3_100.png',
    InfoClass: 'infoRed'
  }
});
</script>
  <style>
      .view{
          width: 300px;
          height: 30px;
          border: 1px solid gray;
          line-height: 30px;
          text-align: center;
        }
       .active{  // 使能样式
          color: red;
        }
</style>
// 当isActive为true时,这个div就会添加类名active;当isActive为false时,这个div就会移出类名active;
<div class="view" :class='{active:isActive}'>
    {{message}}
</div>
   var app = new Vue({
      el: '.view', 
      data: {     
           message: 'hello Vue.',
           isActive: false 
       }
   });
<div id="app">
    <p>{{ message }}</p>
     // 双向数据绑定
    <input v-model="message">
</div>
var app = new Vue({
  el: '#app',
  data: {
    message: 'Hello Vue!'
  }
})

二、Vue组件中重要选项

Vue的实例是Vue框架的入口,其实也就是前端的ViewModel,它包含了页面中的业务逻辑处理、数据模型等,当然它也有自己的一系列的生命周期的事件钩子,辅助我们进行对整个Vue实例生成、编译、挂载、销毁等过程进行js控制。

<div id="app">
    {{ message }}
</div>
var app = new Vue({
    el: '#app',
    data: {  // data数据选项
      message: 'Hello Vue!'
    }
 })
<div id="view">
  <input type="button" value="按钮" @click='doThis' />
</div>
<script>
new Vue({
  el: '#view',
  methods: {  // methods方法选项
    doThis: function(){
      alert('hello');
    }
  }
});
</script>
<div class="view">
   // 计算属性,好处在于会自动根据totalPrice显示不同内容
   {{showStr}}
</div>
var app = new Vue({
  el: '.view', 
  data: {
    totalPrice: 18
  },
  computed: {  // Vue对象的computed属性
    // 计算属性,但该属性是一个方法
    showStr: function(){  
       // this指向vue实例 
      if(this.totalPrice < 20){
        return '金额小于20,没有优惠喔!'
      } else {
        return '金额大于20,免配送费!'
      }
    }
  }
 });
  var view2 = new Vue({
    el: '#view2',
    data: {
      a: 1
    },
    methods: {
      doSomething: function(){
        this.a++;
      }
    },
    watch: {
      a: function(newvalue, oldvalue){
        console.log(newvalue, oldvalue);
      }
    }
 });

三、Vue实例的生命周期

Vue实例有一个完整的生命周期,也就是从开始创建、初始化数据、编译模板、挂载Dom、渲染→更新→渲染、卸载等一系列过程,我们称这是Vue的生命周期。通俗说就是Vue实例从创建到销毁的过程,就是生命周期。


Vue实例生命周期.png

Vue提供的可以注册的钩子都在上图片的红色框标注:

四、Vue的全局API

Vue.nextTick(function () {
    // DOM 更新完成,可以操作
})
  Vue.set( object, key, value )
// 导入VueRouter
import VueRouter from 'vue-router';
// 加载插件(全局注册一样)  
Vue.use(VueRouter);
  var MyComponent = Vue.extend({
      template: '<div>Hello!</div>'
  });

  // 创建并挂载到 #app (会替换 #app)
  new MyComponent().$mount('#app')
  // 同上
  new MyComponent({ el: '#app' })

五、组件

组件 (Component) 是 Vue.js 最强大的功能之一。组件可以扩展 HTML 元素,封装可重用的代码。在较高层面上,组件是自定义元素,Vue.js 的编译器为它添加特殊功能。组件其实就是一个拥有样式、动画、js逻辑、HTML结构的综合块。

  - 功能模块: select、pagenation...
  - 页面区域划分: header、footer、sidebar...
<script>
// 创建构造器
var Profile = Vue.extend({
    // 新的对象的模板,所有子实例都会拥有此模板
    template: '<p>{{firstName}}  {{lastName}}</p>',
     // 创建的Vue实例时,data可以是Object 也可以是Function,但是在扩展的时候,data必须是一个函数,而且要返回值
    data: function () {  
        return {            
          firstName: '张三',
          lastName: '张二蛋',
       }  
    }
  });

  // 创建 Profile 实例,并挂载到一个元素上
  new Profile().$mount('#mount-point')
  // 或者下面这种写法
  new Profile({
    el: '#mount-point'
  });
</script>
<div id="view">
    <!--组件直接跟普通的标签一样的使用-->
    <my-title></my-title>
</div>
// 注册一个组件
Vue.component('my-title', {
    // 模板选项设置当前组件,最终输出的html模板。注意:有且只有一个根元素。
    template: '<div>A custom component!</div>'
})

  // 创建根实例
  new Vue({
     el: '#view'
  })
   <div class="view">
        // 组件在注册之后,便可以在父实例的模块中以自定义元素
       <my-components></my-components>
   </div>
<script>
    var Child = {
        template: '<div>A custom component!</div>'
    }

    //  创建一个Vue实例
    var app = new Vue({
        el: '.view',
        components: {  // 局部注册组件(如果没有局部注册是不能使用的)
            'my-components' : Child
        }
    });
</script>
   <div class="view">
       <my-title></my-title>
   </div>
<script>
    // 注册一个全局组件
    Vue.component('my-title', {
        template: '<h1> {{title}} </h1>',
        data: function(){
            return {
                title: 'hello Vue!'
            }
        }
    });

    //  创建一个Vue实例
    var app = new Vue({
        el: '.view'
    });
</script>
  // Hello.vue组件
    <template>
        <h3>
            标题: {{str}}
        </h3>
    </template>
    
    <script>
        export default {
            data: function(){
                return {
                    str: 'hello Vue!'
                }
            }
        }
    </script>
    
    <style>
        h3{
            text-align: center;
        }
    </style>
<script>
  // App.vue组件中使用Hello.vue组件
  // 导入Hello组件
  import Hello from './components/Hello';
  export default {
    // ...
    components: {  // 局部注册组件
      Hello
    }
  }
</script>
<template>
   // 使用自定义元素(Hello组件)
  <hello></hello>
</template>

通过vue-cli脚手架构造项目

  // App.vue中

  // 导入组件
  import Header from './header'  
  import Footer from './footer'  

  new Vue({
    // 组件需要注册之后才能使用
    components:{
      Header, Footer
    }
  })

  // 在App.vue中
  <header></header>
  <footer></footer>
  // header.vue 子组件
  new Vue({
    props: ['message'],  // 不同组件中的数据操作()
    methods: {
      doThis: function(){  // 子组件获取到父组件传递的参数this.message
        console.log(this.message);
      }
    }
  })
  // props可以其他写法
props:{
    seller:{  // 即是设置接收参数的数据类型
      type: Object,  // 参数的类型
      // default 是设置默认值的
    }
 }
  // app.vue 父组件
  // 将字符串内容'hello world!'传递给子组件
  <header message='hello world!'></header>

  // 绑定data属性值
  // <header :message='title'></header> 
  // app.vue 父组件
  
  // 自定义事件v-on: child-tell-me, 事件名为'child-tell-me'
  <component-b v-on:child-tell-me='getMsg'></component-b>

  new Vue({
    // ...
    methods: {
      // 'child-tell-me'对应触发的方法,即父组件获取子组件传递的参数msg
      getMsg: function(msg){  
        console.log(msg)
      }
    }
})
  // footer.vue 子组件
    new Vue({
    // ...
    methods: {
      // 在sendMsg方法中,即触发'child-tell-me'方法,并传递参数
      sendMsg: function(msg){  
        this.$emit('child-tell-me', '你收到我发送的消息了吗?【componentB】')
      }
    }
})

六、Vue路由

对于前端来说,其实浏览器配合超级连接就很好的实现了路由功能。但是对于单页面应用来说,浏览器和超级连接的跳转方式已经不能适用, 所以各大框架纷纷给出了单页面应用的解决路由跳转的方案。
Vue框架的兼容性非常好,可以很好的跟其他第三方的路由框架进行结合。当然官方也给出了路由的方案:vue-router; 建议还是用官方的最好,使用量也是最大,相对来说Vue框架的升级路由组件升级也会及时跟上,所以为了以后的维护和升级方便还是使用Vue自家的东西最好。

  // 每个路由path应该映射一个组件
    const routes = [
        {path: '/foo', component: Foo},
        {path: '/Bar', component: Bar}
    ];
    // 创建 router 实例,然后传 `routes` 配置
    const router = new VueRouter({  
        routes   // (缩写)相当于 routes: routes,es6的新语法
    });
    const app = new Vue({
        router
    }).$mount('#app');
<div id="app">
      <p>
          <!-- 使用 router-link 组件来导航. -->
          <!-- 通过传入 `to` 属性指定链接. -->
          <!-- <router-link> 默认会被渲染成一个 `<a>` 标签 -->
          <router-link to="/foo">Go to Foo</router-link>
          <router-link to="/bar">Go to Bar</router-link>
      </p>
      <!-- 路由出口 -->
      <!-- 路由匹配到的组件将渲染在这里 -->
      <router-view></router-view>
</div>

注意: vue-router@2.x 只适用于 Vue 2.x 版本。 vue-router@1.x 对应于Vue1.x版本。
用 Vue.js + vue-router 创建单页应用,是非常简单的。使用 Vue.js ,我们已经可以通过组合组件来组成应用程序,当你要把 vue-router 添加进来,我们需要做的是,将组件(components)映射到路由(routes),然后告诉 vue-router 在哪里渲染它们。

七、视频学习

如果想要对Vue做进一步的学习,可以查看视频课程,后续还会有vue进阶的实战视频喔!
vue入门基础

上一篇下一篇

猜你喜欢

热点阅读