data: 推荐用函数
为啥推荐data用函数呢?
防止出现一个date被多个组件共用的情况
如果是通过Import … from Vue文件得到的一个组件,再render这个组件
如果data是对象
- new Vue(Demo) 如果两次调用,那么两次调用都使用的是一个Data
如果data是函数,
- new Vue(Demo) 如果两次调用,因为每次使用data, 都会生成一个全新的对象,不会出现两个组件共用同一个data
组件component
Vue组件是带有名称的可复用实例
组件创建和使用的三种方式:
Vue单文件组件(常用,体现模块化思想)
- 首先,将Vue文件import引用到当前实例文件中:
import Demo2 from './demo2.vue'
- 在new Vue实例中写入名称以声明:
components:{Demo2:Demo2}
(一般名称定义与组件名称一致) - 在template模板中插入组件标签以调用:
template:
`` - 组件自定义名称要用大写开头(为了区别于原生实例中的标签)
- 首先,将Vue文件import引用到当前实例文件中:
原生JS
- 结合前两者
import Demo2 from './demo2.vue' // 第一种方式
Vue.component('Demo3', { // 第二种方式
template:`
<div>demo3333</div>
`
})
用new Vue({})生成的对象是实例,我们可以在实例里使用组件:
new Vue({
components: {
Demo2: Demo2
Demo4: { // 第三种方式
template:`
<div>demo4444</div>`
},
template: `
<div>
<Demo2/> // 在这里插入组件
<Demo3/>
</div>`,
}).$mount('#app')
我是入口,我就是实例; 我用别人,别人就是组件;
顾名思义,组件就是组合而成的物件,其实组件 component中存放的物件和Vue实例一样,换而言之,组件实则是“Vue实例中的实例”,只不过是有自定义名称的实例
外部属性props
相对于date内部数据而言,用于从父组件接收数据的数组或对象
传递静态或动态的 Prop
传入一个静态的值:
<blog-post title="My journey with Vue"></blog-post>
通过 v-bind 或简写 : 动态赋值传入动态的值:(此时双引号内是原生JS)
<!-- 动态赋予一个变量的值 -->
<blog-post :title="post.title"></blog-post>
<!-- 动态赋予一个复杂表达式的值 -->
<blog-post :title="post.title + ' by ' + post.author.name"></blog-post>
props的声明和调用方式:
声明:在子组件js部分声明props并自定义属性名
//demo.vue文件中
<template>
<div class="red">
这里是demo内部
{{message}}
<button @click="fn">call fn</button>
</div>
</template>
<script>
export default {
props: ['message', 'fn'] //可以在Vue组件上注册一些自定义 attribute 表示声明
}
</script>
<style scoped>
.red {
background: coral;
border: 1px solid red;
}
</style>
调用:在父组件的模板中调用;通过静态、动态传值给子组件
main.js
const Vue = window.Vue
Vue.config.productionTip = false
import Demo from './demo.vue'
new Vue({
data: function () {
return {
n: 0
}
},
components: {Demo},
template: `
<div>
这里是外部的实例:{{n}}
<Demo :message="n" :fn="add"></Demo> //动态传值利用冒号;在模板中插入调用props
</div>
`,
methods: {
add() {
this.n += 1
}
}
}).$mount('#app')