Vue基础(二)

1.Vue的生命周期

2.Vue的组件

2.1 多文件组件

2.1.1 含义

即一个文件里面包含多个组件

2.1.2 用法

组件主要分成三部分:

1.定义组件,通过Vue.extend定义组件

2.注册组件,在Vue的components中加入组件,此时注册的时候定义的组件名称

3.使用组件,将组件直接写入到模板中

javascript 复制代码
<body>
    <div id="root">
        <!-- 4.使用组件 -->
        <school></school>
        <student></student>
    </div>
    <script>
        
        // 1.定义student组件
        const student = Vue.extend({
            template:
            `
            <div>
            名称:<h1>{{name}}</h1>
            年龄:<h1>{{age}}</h1>
            </div>
            `,
            data() {
                return {
                    name :"张三",
                    age:12
                }
            }
        })
        // 2.定义的school组件
        const school = Vue.extend({
             template:
            `
            <div>
            地址:<h1>{{addreass}}</h1>
            </div>
            `,
                data() {
                    return {
                        addreass: "北京"
                    }
                }
            })

        // 3.注册组件
        new Vue({
            el:"#root",
            components:{
                student,school
            }
        })
        
    </script>
</body>

2.2 特别说明

1.上面的school组件本质上就是一个VueComponent的构造函数,并且不是程序员生成的,而是有Vue.extend生成的

2.每次写一个VueCompoent组件,都会调用new VueComponent(option)生成一个VueCompoent的实例。

3.注意,每次调用Vue.extend返回的都是一个新的VueComponent实例。

4.在组件配置中,method,computed,watch中的函数都指向VueComponent这个实例。

2.3 一个内置关系

存在一个内置关系

javascript 复制代码
VueComponent.prototype.__proto__=Vue.prototype

这样做的目的是让VueComponent找不到属性时,可以向上寻找,去Vue的原型对象上寻找。

3.Vue脚手架

3.1 Vue脚手架的创建

bash 复制代码
npm install -g vue@cli
vue create xxxx

注意:如果是Vue2的话,脚手架需要低于4版本

3.2 Vue脚手架-render

3.2.1 vue.js和vue.min.js的区别

vue.js包含vue的核心文件和模板解析器,但是vue.min.js并不包含模板解析器。

3.2.2 render的作用

由于没有模板解析器,所以不能使用template配置项,需要通过render函数接收到的createElement函数去解析组件。

3.3. 修改Vue脚手架的默认配置

查看默认配置

bash 复制代码
vue inspect > output.js

如果需要修改,可以修改vue.config.js这个文件,遵循nodejs的语法规范,并且会进行合并。

bash 复制代码
const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
  transpileDependencies: true
})

4.ref属性

4.1 作用

给某个标签机上ref属性后,可以通过this.$refs.属性名来获取对应的标签或者子组件(如果是加在Vue组件上)

4.2基本用法

javascript 复制代码
<template>
  <div id="root">
    <div class="todo-container">
      <div class="todo-wrap">
        <button ref="btn" @click="test">点我查看组件</button>
        <MyHeader ref="header"></MyHeader>
      </div>
    </div>
  </div>
</template>

<script>
import MyHeader from "./components/MyHeader.vue";

export default {
  name: "App",
  components: {
    MyHeader
  },
  data() {
    return {};
  },
  methods: {
    test() {
      console.log(this.$refs.btn);
      console.log(this.$refs.header);
    },
  },
};
</script>

5.props

5.1 作用

父组件向子组件传递数据

5.2 基本用法

父组件传递信息

javascript 复制代码
<template>
  <div id="root">
    <div class="todo-container">
      <div class="todo-wrap">
        <MyHeader ref="header" name="张三" :age="18"></MyHeader>
      </div>
    </div>
  </div>
</template>

注意:入股需要串一个计算的值过去,可以通过:age的方式,来保证传递的是一个js表达式,并将js表达式传递过去

子组件接收:

javascript 复制代码
export default {
  name: 'MyHeader',
  data() {
    return {};
  },
  props:['name','age'],

  components: {},

  computed: {},

  methods: {
      add(e) {
         this.addTodo(e.target.value);
      }
   
  },
};

5.3 特殊说明

1.严格的数据传递

javascript 复制代码
 props:{
    name:{
      type:String,  //接收参数类型
      required:true, //是否必传
      default:"默认值" //默认值
    }
  },

2.props是只读的

如果需要修改,可以复制一份到data中,在data中进行修改

相关推荐
程序员大阳2 小时前
副队长JavaScript教程(49)-主动抛出异常与错误类型
javascript·异常处理·error·throw·错误类型
hhhjhl2 小时前
Protobuf.js 跨端三方库仓颉适配全流程
javascript·网络·udp
康小汪2 小时前
AI 写 Vue 总写成同一个味道:给它装 Skills,装的不是知识是边界
前端·vue.js·人工智能·ai编程·最佳实践
智能运维指南3 小时前
研制过程“两张皮“怎么破:研制一体化支撑平台的定位、能力边界与落地前提
java·前端·人工智能·嘉为蓝鲸
白山编程大哥4 小时前
Java 后端如何优雅地把 List 集合返回给前端
java·前端·list
Flynt5 小时前
我把热榜那篇"禁用 axios"逐条实测了一遍:结论大体对,坑在它没讲的地方
前端·javascript·axios
Csvn6 小时前
bundle优化
前端
slongzhang_6 小时前
linux 递归删除源码文件|递归删除目录下 *.js,但排除 *.min.js
linux·开发语言·javascript
北冥有鱼6 小时前
发版后动态路由点击报 `Failed to fetch dynamically imported module`」问题上的完整排查与修复过程
前端·vue.js
静默回滚6 小时前
视频压到 25 MB 以内,码率要算、音轨要扣、余量要留
前端