当前位置: 首页 > Web前端 > HTML

Vue学习笔记(三)

时间:2023-04-02 13:24:14 HTML

一、组件(一)什么是组件组件(Component)是Vue.js最强大的功能之一。组件可以扩展HTML元素,并封装可重用的代码。组件是自定义元素(对象)。(2)创建组件的两种方式。官方推荐的组件标签名是使用-连接复合词,例如:。1.使用构造函数创建组件这种方式创建组件首先需要使用Vue.extend()创建组件构造函数,然后使用Vue.component(标签名,组件构造函数)创建组件根据组件构造函数。//1。创建构造函数varMyComponent=Vue.extend({template:'

HelloWorld

'});//2.创建一个组件Vue.component('my-hello',MyComponent);//3。使用组件
这种创建组件的方法比较麻烦,用的比较少。2.直接创建组件使用Vue.component(tagname,componenttemplate)根据组件构造函数创建组件。//1。创建组件Vue.component('my-world',{template:'

hellovue.js

'});//2。使用组件
(3)组件的分类组件分为全局组件和局部组件。1.全局组件使用Vue.component()创建的组件都是全局组件。这样的组件可以在任何组件中使用。上面我们创建的是全局组件。2.局部组件局部组件一般定义在实例的选项中,称为实例的子组件。相应地,实例也称为父组件。//1。定义组件newVue({el:'#app',components:{dawei:{template:'

我叫dawei

'}}});//2.使用组件
(四)引用模板很多时候我们的模板模板中需要存放很多标签内容,这样写起来会很麻烦.这时候我们就可以使用template标签了。用法如下://使用模板标签

hello{{msg}}

    {{value}}
newVue({el:'#app',components:{'my-dawei':{template:'#wbs',//selecttemplateLabeldata(){return{msg:'vue.js',arr:["a","b","c","d"]}}}}});这里涉及到的几个知识点需要重点提一下:在template模板中,所有元素必须放在一个根元素中,否则会报错。在示例中,我们将元素放置在
标记内。组件中的data选项必须是函数类型,使用return返回所有数据。(5)动态组件很多时候,在项目的某个地方需要动态使用不同的组件,这时候就需要使用动态组件。动态组件的使用需要绑定is属性:简单示例://点击按钮显示不同的组件显示组件a显示组件b//输入flag
newVue({el:'#app',data:{flag:'my-a'//给flag赋值},components:{'my-a':{template:'

我是组件a

',},'my-b':{template:'

我是组件b

'}}});(6)keep-alivecomponents使用keep-alivecomponents来缓存不活跃的组件,可以保持状态,避免重新渲染。默认情况下,每次都会销毁和重新创建非活动组件。用法示例:xy
newVue({el:'#app',data:{flag:'my-x'},components:{'my-x':{template:'

{{x}}

',data(){return{x:Math.random()}}},'my-y':{template:'

{{y}}}p>',data(){return{y:Math.random()}}}}});这样第一次产生的随机数会被缓存起来,再次切换时不会改变。2.组件间的数据传递(1)父子组件定义了一个组件内部的另一个组件,那么这对组件就称为父子组件。子组件只能在父组件内部使用。默认情况下,每个组件实例的作用域都是独立的,子组件无法访问父组件中的数据,同理,父组件也无法访问子组件中的数据。

{{msg}}

{{mydata}}

(2)组件间数据传递(通信)1.子组件访问父组件的数据步骤:a.调用子组件时,绑定父组件中想要获取的数据b.在子组件内部,使用props选项声明获取数据,即从父组件接收数据改进上面的例子:/div>

{{msg}}

这是传递给子组件的值:{{myname}}

{{mydata}}

这是父组件传递过来的数据:{{name}}

2.父组件访问子组件数据的步骤:a在子组件中使用vm.$emit(eventname,data)触发自定义事件并将数据发送给父组件,事件名称自定义b父组件在使用子组件的地方监听子组件触发的事件,并在父组件中定义一个获取数据的方法//的内部方法childcomponent'my-b':{send(){//使用$emit()触发事件发送数据,this引用当前子组件实例this.$emit('e-world',this.senddata);}}//监听子组件调用事件的子组件触发,调用自己的方法获取数据methods:{getData(data){//参数为子组件传过来的数据this.revicedata=data;}}3。单向数据流道具是单向数据绑定。当父组件的数据发生变化时,会传递给子组件,但不会反转,不允许子组件直接修改父组件中的数据,强行修改会报错。解决方法:如果子组件想把它当作本地数据使用,可以把数据存到另一个变量中,然后在不影响父组件中数据的情况下进行操作。如果子组件要修改数据同步更新到父组件,有两种方法:使用.sync显式触发更新事件(1.0版本支持,2.0版本不支持,2.3版本支持)//use.sync//子组件修改父组件传入的值name,并触发update更新事件this.$emit('更新:名称',"vuejs");可以将父组件中的数据包装成一个对象,然后在子组件中建议使用该方法修改对象在组件中的属性(因为对象是引用类型,指向同一个内存空间).data(){return{//将要传递的数据放入消息对象message:{hello:'Hi子组件b,我是父组件a'}}}//将此对象传递给子组件methods:{//在子组件内部修改此值,使其同步传递给父组件。edit(){this.message.hello="hahahahh";}}4。非父子组件之间的通信非父子组件之间的通信,可以使用一个空的Vue实例作为中央事件总线(eventcenter),用它来触发事件和监听事件来实现非父子组件之间的通信-子组件。varEvent=newVue();//空的vue实例方法:{send(){//触发发射事件Event.$emit("hello",this.asmsg);}}mounted(){//在子组件中监听钩子函数中的事件Event.$on('hello',data=>{//获取值this.bsmsg=data;})}3.Slot内容分发用于获取组件中的原始内容varvm=newVue({el:'#app',components:{'my-hello':{template:'#hello'}}});hellovue.js
如果没有原创内容,则显示内容
如果组件标签中没有内容,那么就会显示槽中的内容,也就是所谓的单槽。还可以对显示的内容进行分组,即命名槽,可以对标签组中的内容进行操作:
  • aaa
  • bbb
  • ccc
  • 111
  • 222
  • 333
  • //指定名称slotPlacethecontentofs2here

    hellovue.js

    //Putthecontentnameds1here
    像这样,你可以实时对组件中的内容进行操作。