• Vue学习笔记四


    一、非单文件组件

    1、基本使用 

    1. <body>
    2. <div id="root">
    3. <school>school>
    4. <hr>
    5. <student>student>
    6. <hr>
    7. <student>student>
    8. div>
    9. body>
    10. <script type="text/javascript">
    11. Vue.config.productionTip = false;
    12. // template内只能有一个根节点
    13. const school = Vue.extend({
    14. template: `
    15. <div>
    16. <h2>学校名称:{{schoolName}}h2>
    17. <h2>学校地址:{{address}}h2>
    18. <button @click="showName">点我提示学校名button>
    19. div>
    20. `,
    21. data() {
    22. return {
    23. schoolName: '尚硅谷',
    24. address: '北京'
    25. }
    26. },
    27. methods: {
    28. showName() {
    29. alert(this.schoolName);
    30. }
    31. }
    32. })
    33. const student = Vue.extend({
    34. template: `
    35. <div>
    36. <h2>学生姓名:{{studentName}}h2>
    37. <h2>学生年龄:{{age}}h2>
    38. div>
    39. `,
    40. data() {
    41. return {
    42. studentName: '张三',
    43. age: 18
    44. }
    45. }
    46. })
    47. new Vue({
    48. el: '#root',
    49. components: {
    50. school: school,
    51. student: student
    52. }
    53. })
    54. script>

    2、VueComponent

    • Vue.extend会创建一个VueComponent对象并返回
    • 每有一个组件,即使组件同名,也都会创建一次VueComponent
    • 组件配置中,data函数、methods函数、watch函数、computed函数中的this指向的是VueComponent对象,而同样直接new Vue中的this指向的是vm对象。因为vm是VueComponent的父类,vm会管理很多个VueComponent对象

     3、原型链

    一个重要的内置关系:VueComponent.prototype.__proto__ === Vue.prototype,这样可以让组件实例对象(VueComponent)可以访问到Vue原型上的属性和方法

    二、Vue CLI的安装

    1、设置镜像仓库 

    npm config set registry https://registry.npm.taobao.org

    2、安装vue cli 

    npm install -g @vue/cli

    3、创建脚手架 

    cmd进入文件夹目录下,创建脚手架

    vue create 项目地址

    4、创建完成后,进入项目文件夹下,运行项目

    1. cd 项目地址
    2. npm run serve

    三、Render函数

    vue.js和vue.runtime.xxx.js的区别

    • vue.js是完整版的vue,包含:核心功能+模板解析器
    • vue.runtime.xxx.js是运行版的vue,只包含:核心功能,没有模板解析器

    因为vue.runtime.xxx.js没有模板解析器,所以不能使用template配置项,需要使用render函数接收到的createElement函数去指定具体内容

    1. new Vue({
    2. el: '#app',
    3. render: h => h(App),
    4. })

    四、ref标签

    • 被用来给元素或子组件注册引用信息(id的替代者)
    • 应用在html标签上获取的是真实DOM元素,应用在组件标签上是组件实例对象(VueComponent) 
    1. <template>
    2. <div id="root">
    3. <h1 v-text="msg" ref="title">h1>
    4. <button @click="showDOM" ref="btn">点我输出上方的DOM元素button>
    5. <School ref="sch">School>
    6. div>
    7. template>
    8. <script>
    9. import School from './components/School';
    10. export default {
    11. name: 'App',
    12. data() {
    13. return {
    14. msg: '欢迎学习Vue!'
    15. }
    16. },
    17. components: {
    18. School
    19. },
    20. methods: {
    21. showDOM() {
    22. console.log(this.$refs.title); // 真实DOM元素
    23. console.log(this.$refs.btn); // 真实DOM元素
    24. console.log(this.$refs.sch); // School组件的实例对象(VueComponent)
    25. }
    26. }
    27. }
    28. script>

    五、props配置

    1、作用

    让组件接收外部传过来的数据

    2、传输方式

    1. <template>
    2. <div id="app">
    3. <Student name="李四" sex="女" :age="18">Student>
    4. div>
    5. template>

    3、接收方式

    共有三种,简单接收、限制类型、指定默认值 

    1. <template>
    2. <div>
    3. <h1>{{msg}}h1>
    4. <h2>学生姓名:{{name}}h2>
    5. <h2>学生性别:{{sex}}h2>
    6. <h2>学生年龄:{{age}}h2>
    7. div>
    8. template>
    9. <script>
    10. export default {
    11. name: 'Student',
    12. data() {
    13. return {
    14. msg: '我是一个尚硅谷学生'
    15. }
    16. },
    17. // 1、简单接收
    18. // props: ['name','sex','age']
    19. // 2、接收的同时对数据进行类型限制
    20. // props: {
    21. // name: String,
    22. // age: Number,
    23. // sex: String
    24. // }
    25. // 3、最全的方式
    26. props: {
    27. name: {
    28. type: String,
    29. required: true // name参数必须要
    30. },
    31. age: {
    32. type: Number,
    33. default: 50 // 默认值
    34. },
    35. sex: {
    36. type: String,
    37. required: true
    38. }
    39. }
    40. }
    41. script>

    4、注意点

    • props的优先级大于data
    • props是只读的,如果进行了修改,会发出警告。如果确实需要修改,那么复制props的内容到data中,然后去修改data中的数据

    六、mixin混入

    1、作用

    可以把多个组件共同的配置提取成一个混入对象

    2、使用方式

     定义混入代码

    1. export const mixin= {
    2. methods: {
    3. showName() {
    4. alert(this.name);
    5. }
    6. }
    7. }

    组件中引入混入代码

    1. <script>
    2. import {mixin} from '../mixin'
    3. export default {
    4. name: 'Student',
    5. data() {
    6. return {
    7. name: '张三',
    8. sex: '男'
    9. }
    10. },
    11. mixins: [mixin]
    12. }
    13. script>

    3、注意点

    mixin中如果有mounted函数,那它的优先级大于当前组件中的mounted

    七、插件

    1、作用

    八、scoped样式

    1、作用

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

    2、写法

     

  • 相关阅读:
    基于单片机的太阳能热水器控制系统设计
    零基础学Java第六节(面向对象二)
    现有TiDB集群扩展pump/drainer作为binlog文件落地
    docker部署mysql无法远程连接2003解决
    java 微信小程序 校园跑腿系统
    刚刚阿里面软件测试回来,3+1面任职阿里P7,年薪28*15薪
    DTW学习(dynamic time warping)——思想、代码实现
    链表经典面试题之二
    shell示例
    探索服务器的无限潜能:创意项目、在线社区与更多可能
  • 原文地址:https://blog.csdn.net/colspanprince/article/details/125785740