Vue学习总结3-Vue-cli脚手架和Vue组件使用

Vue学习总结3-Vue-cli脚手架和Vue组件使用

Vue

Vue-Cli是官方提供的Vue脚手架用于快速搭建一个Vue项目模板
#vue 安装步骤
# 下载安装node.js
node -v #查看node版本
npm install vue-cli -g #全局安装Vue脚架
mkdir vueproject #创建Vue项目
cd vueproject
vue list #查看模板列表
vue init webpack-simple(模板名) vueproject1(工程名) #初始化Vue项目
npm install #安装依赖加速安装可使用cnpm或 npm install --registry=https://registry.npm.taobao.org
npm run dev #运行Vue项目成功后如下图
npm run build #打包项目

目录结构.jpg

src 目录用于放自己代码文件 package.json 依赖环境 APP.vue,main.js主要组件组合
运行效果.jpg

Vue组件使用(引入组件的效果说白了就是引入组件页面效果)
首先我们对App.vue处理一下(删除无用的组件元素)
删除后代码如下
<!--html标签-->
<template>
  <div id="app">
    <img src="./assets/logo.png">
    <h1>{{ msg }}</h1>
  </div>
</template>
<!--js-->
<script>
export default {
  name: 'app',
  data () {
    return {
      msg: 'Welcome to stack Vue.js App'
    }
  }
}
</script>
<!--样式信息-->
<style>
</style>

在src下新建components目录 在components目录下新建三个组件

vue-componets.jpg

组件内代码如下(组件的style标签里加入scoped关键字说明样式只作用于当前组件)
<!--head组件-->
<template>
    <div>
      <h1>{{title}}</h1>
    </div>
</template>

<script>
    export default {
        name: "Head",
        data() {
          return {
            'title': 'vue head by stack'
          }
        }
    }
</script>

<style scoped>

</style>
<!--body组件-->
<template>
    <div>
      <p>{{title}}</p>
    </div>
</template>

<script>
    export default {
        name: "Body",
        data(){
          return {
            'title': 'vue body by stack'
          }
        }
    }
</script>

<style scoped>

</style>
<!--foot组件-->
<template>
    <h1>{{title}}</h1>
</template>

<script>
    export default {
        name: "Foot",
        data(){
          return{
            'title': 'vue foot by stack'
          }
        }
    }
</script>

<style scoped>

</style>

两种组件注册方式实现(全局注册和本地注册,全局注册和本地注册任选一种)
全局注册(修改main.js如下)

import Vue from 'vue'
import App from './App.vue'
/*全局注册组件*/
import myhead from './componets/Head'
import mybody from './componets/Body'
import myfoot from './componets/Foot'

Vue.component("myhead",myhead)
Vue.component("mybody",mybody)
Vue.component("myfoot",myfoot)

new Vue({
  el: '#app',
  render: h => h(App)
})

App.vue引入组件(修改App.vue如下)

<template>
  <div id="app">
    <myhead></myhead>
    <img src="./assets/logo.png">
    <h1>my First Vue Project</h1>
    <mybody></mybody>
    <myfoot></myfoot>
  </div>
</template>

<script>
export default {
  name: 'app',
}
</script>

<style lang="scss">
</style>

本地注册组件
修改App.vue如下

<template>
  <div id="app">
   <myhead></myhead>
    <mybody></mybody>
    <myfoot></myfoot>
  </div>
</template>

<script>
  /*本地注册组件*/
  import myhead from './componets/Head'
  import mybody from './componets/Body'
  import myfoot from './componets/Foot'

export default {
  name: 'app',
  components:{
    'myhead' : myhead,
    'mybody' : mybody,
    'myfoot' : myfoot
  }

}
</script>

<style lang="scss">
</style>

npm run dev 运行如下效果(注意template必须有一个根节点即div标签)

vue-run.jpg

组件之间参数传递(父传子,子传父)
父传子(即从组合组件页面向单组件页面传参数)
子传父(即从单组件页面向组合组件页面传参数)
创建两个组件sub1和sub2
<!--sub1-->
<template>
    <div>
      <p>{{title}}</p>
      <p>{{myarg}}</p>
    </div>
</template>

<script>
    export default {
        name: "sub1",
        /**方式一接受参数以数组列表形式 */
        /**props:['myarg'],*/
        /**方式二(常用)对象形式 */
        props:{
          myarg:{
              type:String, 
              required:true,
               default:'默认值'
          }
        },
        data(){
          return {
            'title': 'sub1'
          }
        }
    }
</script>

<style scoped>

</style>
<!--sub2-->
<template>
    <div>
      <p>{{title}}</p>
      <button v-on:click="doClick()">向父组件传递参数</button>
    </div>
</template>

<script>
    export default {
        name: "sub2",
        methods:{ 
            doClick:function(){ 
                 this.$emit('newName','我是来自子组件的参数'); 
            } 
            },
        data(){
          return {
            'title': 'sub2'
          }
        }
    }
</script>

<style scoped>

</style>

修改App.vue

<template>
  <div id="app">
    <img src="./assets/logo.png">
    <h1>{{ msg }}</h1>
    <h2>父组件向子组件传递参数</h2>
    <mysub1 :myarg="arg"></mysub1>
    <h2>子组件向父组件传递参数</h2>
    <mysub2  @newName="name=$event"></mysub2>
    {{name}}
  </div>
</template>

<script>
/**本地组件引入*/
import sub1 from './components/sub1.vue'
import sub2 from './components/sub2.vue'

export default {
  name: 'app',
  data () {
    return {
      msg: 'Welcome to stack Vue.js App-组件之间参数传递',
      arg: '我是来自父组件的参数哈哈',
      name:''
    }
  },
  /** 本地组件注册*/
  components:{
    mysub1:sub1,
    mysub2:sub2,
  }
}
</script>

<style>
</style>

实现效果如下

vue-args.jpg

总结:Vue组件的使用大大提高了页面的复用与组合,页面组件注册分为本地注册和全局注册,看使用域选择注册方式,通过Vue参数传递配合Vue对象声明周期和axios请求即可实现页面数据加载这点个人感觉十分重要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值