vue part6

Vue脚手(CLI)

第一步(仅第一次执行):全局安装@vue/cli。
npm install -g @vue/cli-
第二步:切换到你要创建项目的目录,然后使用命令创建项目vue create xxxx(项目名字)
第三步:启动项目 npm run servee 

babel.config.js是es6=>es5的文件,

package.json是配置文件,

对于main.js分析

我来回顾一下,$mount用来挂载实例,和el的功能基本一样,这个$mount是用来手动挂载的

assets文件夹放静态资源,如logo.png,components文件夹中的App.vue

public文件夹的index.html,

前面的兄弟应该用lintOnSave = false   关闭lint的自检再重启服务就可以了

前方报错Scholl和Student报错的同学,修改组件name名称采用大驼峰命名

总结下来工作过程就是先引入vue组件,然后执行创建实例,然后渲染容器

error的话改一下组件名,因为vue的规范要求组件名必须是多个单词,改成MySchool之类的就可以了,两个组件名报错的,把组件里的vc的name值改成双驼峰命名,如SchoolName

render函数

运行时vue残缺了模板解析器 需要render辅助

两条路 交给render或者引入完整的vue.js

063_尚硅谷Vue技术_render函数_哔哩哔哩_bilibili

模板解析器占了整个vue体积的3分1,运行时构建不包含模板编译器,因此不支持template选项,只能用render选项,但即使使用运行时构建,在单文件组件中也依然可以写模板,因为单文件组件的模板会在构建时预编译为render函数

webpack已经可以解析cssjs了,不要用模板解析器:模板解析器是用来解析除.vue文件外的模板的,.vue文件中的模板由compiler进行,render则不限

模板解析器是把HTML中的模板解析成json对象AST,这个对象包含了dom的各种属性,在非单文件中必须要模板解析器,但是单文件中的组件都是编译之后的,组件中直接就是ast,就不需要模板解析器了

vue的配置文件

vue把webpack的文件都隐藏了,想看就

vue inspect > output.js

vue inspect > output.js用不了的,使用管理员权限打开就行了,output.js就出现了,1300多行代码。这个文件是个导出文件,相当于把源文件复制出来,也就是说他是无法修改的

只有部分可修改,感觉改配置这就是没事找事

语法检查关不掉可能是安装了ESLint插件需要禁用

ref属性

这里利用的插件是Vue3 Snippets 不是Vetur

065_尚硅谷Vue技术_ref属性_哔哩哔哩_bilibili

有一种具体的感觉,老师讲得太细了,纯纯的小白都能听得很明白,

_props配置

在Student.vue文件中

props:{name:string,age:Number,sex:string}

props:{name:{type:String,required:true},age:{type:Number,default:99},sex:{type:String,required:true}} 

这里的receive方法是vc的,但是它APP的vc上的方法是相同的引用地址,所以你在header上调用就相当于在app上调用

等于就是赋值给一个新变量,之后操作的都是新变量,props的变量不修改

<template>
    <div>
        <h1>{{ msg }}</h1>
        <h2> 学生姓名:{{ name }} </h2>
        <h2> 学生性别:{{ sex }} </h2>
        <h2> 学生年龄:{{ myAge + 1 }} </h2>
        <button button @click="updateAge"> 尝试修改收到的年龄 </button>
    </div>
</template>

<script>
export default {
    name: 'Student',
    data() {
        console.log(this)
        return {
            msg: '我是一个尚硅谷的学生',
            myAge: this.age
        }
        },
            methods: {
             updateAge(){
                this.myAge++
            }
        },
     
    //简单声明接收
     props: ['name', 'age', 'sex', 'key'],
    //接收的同时对数据进行类型限制
/* props:{
name:String,
age: Number,
sex:String
}*/
    //接收的同时对数据:进行类型限制+默认值的指定+必要性的限制
    props: {
        name: {
            type: String,// name的类型是字符串
            required: true,// name是必要的
            age: {
                type: Number,
                default: 99//默认值
            },
            sex: {
                type: String,
                required: true
            }
        }
    }

}


</script>
App.vue文件

mixin混入

App.vue

student.vue

<template>
    <div>      
        <h2 @click="showName"> 学生姓名:{{ name }} </h2>
        <h2> 学生性别:{{ sex }} </h2>
    </div>
</template>

<script>
export default {
    name: 'Student',
    data() {
        //console.log(this)
        return {
            name: '张三',
            sex: '男',
        }
    },
    methods: {
        showName() {
            alert(this.name)
        }
    },

}
</script>

抽出公用代码

export const mixin={
methods: {
        showName() {
            alert(this.name)
        }
    },
}

在另外两个vue中,加一句import {hunhe} from './mixin'和mixins:[hunhe]

<template>
    <div>
    <h2 @click="showName">学校名称:{{name}}</h2>
    <h2>学校地址:{{address}}</h2>
</div>
</template>
<script>
//引入一个hunhe
    import {hunhe} from './mixin'
    export default {
        name:'School',
    data(){
        return{
        name:'尚硅谷',
        address:'北京'
    }
    },
    mixins:[hunhe]
}
</script>

因为mounted可以配置多个方法的,这里就会把配置内容合并在一起。mounted是对状态施加功能,不会有混合的需求,

如果写成两个组件,相同的代码用mixin维护,其他逻辑各写各的,对于后期维护就非常清晰容易

功能:可以把多个组件共用的配置提取成一个混入对象使用方式:混入是vm和vc构造函数的一个属性配置,目的是为了提高配置项的代码复用
第一步定义混合,例如:data(){..], methods: {....}

第二步使用混入,例如:
(1).全局混入:Vue.mixin(xxx) (2).局部混入:mixins:['xxx'] 

插件

插件可以导入全局变量以及对Vue进行全局配置

068_尚硅谷Vue技术_插件_哔哩哔哩_bilibili

注意脚手架版本原因,试着用createApp(App).use(plugins),新版脚手架中,createApp(App)就是Vue,使用方法一样 

过滤器是一个函数,用来接受一个参数,处理完成之后,返回一个参数,这里的mySlice是前面课程切时间那个,使用需要用管道符连接,如 data | mySlice

终端"binding"报错的,在全局指令那里 log一下binding就不会了,定义全局指令有一个binding没用上,删了终端就不会报错

插件是写一些全局可用的功能,和混合区别在于,混合是复用组件内的配置,混合既可以全局混合,也可以单独混合,组件则全局使用,不需要每次都引入

scoped样式

main.js

//引入Vue
import Vue from 'vue'
//引入App
import App from './App.vue'
//关闭Vue的生产提示
Vue.config.productionTip = false
//创建vm
new Vue({
    el: '#app',
    render: h => h(App)
})

App.vue

<template>
    <div>
        <School/>
        <Student/>
    </div>
</template>
<script>
import School from './components/School'
import Student from './components/Student'
export default {
    name: 'App',
    components: {School, Student}
}
</script>

Student.vue

<template>
  <div class="test">
    <h2>学生姓名:{{name}}</h2>
    <h2>学生性别:{{sex}}</h2>
  </div>
</template>

<script>
  export default {
    name:'Student',
    data(){
      return {
        name: '张三',
        sex:'男'
      }
    }
  }
</script>

<style> 
  .test{
    background-color: ■ orange;
  }
</style>

School.vue

<template>
    <div class="demo">
        <h2>学校名称:{{ name }}</h2>
        <h2>学校地址:{address}</h2>
    </div>
</template>
<script>
export default {
    name: 'School',
    data() {
        return {
            name: '尚硅谷atguigu',
            address: '北京',
        }
    },
}
</script>
<style>
.demo {
    background-color: skyblue;
}
</style>

组件都是一起的,冲突的时候,根据App.vue引用顺序后来者居上

<style scoped>
.demo {
    background-color: skyblue;
}
</style>

scoped是指让样式在局部生效,防止冲突

子组件只控制自己的样式(scope)APP组件只控制自己样式,不能更改子组件样式

对less版本和vue 的兼容性问题,069_尚硅谷Vue技术_scoped样式_哔哩哔哩_bilibili

  • 23
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值