0810 vue 创建组件 模板 动态组件 传值

lesson10

1.demo    vue样本

<body>

<div id="myApp">

</div>

</body>

<script>

new Vue({

el:"#myApp",

data:{},

methods:{},

computed:{},

filters:{}

})

</script>

2.案例: 模拟百度搜索框

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<title>Title</title>

<style>

*{

padding:0;

margin:0;

}

p{

border:1px solid green;

}

p.active{

background:gray;

}

</style>

<script src="lib/vue.js"></script>

<!--1、依赖于你的vue.js

2、当你引入resource时,它会在你的Vue.prototype.$http=-->

<script src="lib/vue-resource.js"></script>

</head>

<body>

<div id="myApp">

<!--<input type="text" @keyup.65="search">-->

<!--<input type="text" @keyup.a="search">-->

<!--<input type="text" @keyup.left="search">-->

<form action="https://www.baidu.com/s" target="_blank">

<input type="text" autocomplete="off" v-model="pwd"  name="wd" @keyup="search">

</form>

<p v-for="(item,i) in g"   :class="{active:index===i}">{{item.q}}</p>

</div>

</body>

<script>

// Vue.prototype.$zhang = {

//     run(){

//         console.log(12);

//     }

// }

new Vue({

el:"#myApp",

data:{

pwd:"",

g:[],

index:-1,

q:""// q 代表的是搜索的值

},

methods:{

search(e){

// 第一个参数是地址,第二个参数是你传递的内容,第三个是cb

//  https://www.baidu.com/sugrec?prod=pc&from=pc_web&wd=%E6%97%A0%E9%87%8F&cb=fn

if(e.keyCode === 40){

this.index++;

if(this.index> this.g.length-1){

this.index=-1;

this.pwd = this.q;// 搜索的数据

}else{

this.pwd = this.g[this.index].q;

}

}else{

this.$http.jsonp("https://www.baidu.com/sugrec",{

from:"pc_web",

prod:"pc",

wd:this.pwd

},{

jsonp:"cb"

}).then(({data})=>{

console.log(data);

this.g = data.g;

this.q = data.q;

})

}

//  https://www.baidu.com/sugrec?from=pc_web&pwd=&cb=

// console.log(e.keyCode)

// this.$zhang.run();

}

},

computed:{},

filters:{}

})

</script>

</html>

3.模板     template

1、template 有且只能有一个根元素。

2、将你要挂载的元素进行替换操作。

3、模板当中可以使用指令,data,methods等等都可以使用

// 注意:

          当你实现化VUE实例时,他会看是否有模板,如果有会将你挂载的元素替换。如果没有就使用你挂载的元素作为模板。

template有三种使用方法

1、直接赋值

template:`<div>1</div>`

2、通过script标签来定义

<script type="x/template" id="tp">

<div>2</div>

</script>

template:"#tp"

3、使用内置组件template

<template id="my">

<div>3</div>

</template>

template:"#my"

4.补充指令

v-html:输出的是HTML,可以被浏览器所识别编译。

v-text:输出的是纯文本格式

5.组件

实例:  组件1

<body>

<div id="myApp">

大家好,我在MyApp中

<one></one>   组件的调用

</div>

</body>

<script>

new Vue({

el:"#myApp",

// 定义组件  注册组件   ----》局部组件

components:{

one:{

// 模板决定你组件的内容。

template:`<div>one组件当中</div>`

}

}

})

</script>

实例: 组件2

<body>

<div id="myApp">

   大家好,我在MyApp中

   <one></one>

</div>                   //挂载的元素

</body>

<script>

new Vue({

el:"#myApp",

template:`<div>啦啦啦<one></one></div>`,        //template模板 会将挂载的元素替换

components:{

one:{

template:`<div>one组件当中</div>`                  //one  就是 vue实例下的一个组件

}

}

})

</script>

6.组件的命名规则:

如果组件名字当中包含大写字母需要将其改为小写并以-分割。

7.单向数据流

实例可以向组件进行传递,通过属性(props)

但是 通过属性给组件传递的数据,在组件内是不允许直接修改的。

实例:

<body>

<div id="myApp">

<p>myApp:{{a}}</p>

<one num="12" age="13"></one>

</div>

</body>

<script>

new Vue({

el:"#myApp",

data:{

a:1

},

components:{

one:{

//将你要接收的数据进行设置

props:["num","age"]

temtemplate:‘<div> {{num}}  {{age}}</div>‘

}

}

})

8属性传值:

向下传值通过属性: a.数据的传递是单向的

b.如果要修改数据的话,可以通过父级向组件传递一个函数,通过该函数对你的数据进行修改。

9. 组件vue实例当中的data与vue实例当中的data定义是有 区别的。

data是一个函数,该函数必须要有一个返回值,返回值必须要是一个对象。

为了要保证你子组件当中数据的独立性。

10. 组件嵌套

</body>

<script>

new Vue({

el:"#myApp",

 components:{

one:{

template:`<div>one <two></two></div>`,

components:{

 two:{

template:`<div>two</div>`

}

}

}

}

})

</script>

11.组件与v-for    遍历

<body>

<div id="myApp">

<goods-list v-for="item in arr" :info="item"></goods-list>

</div>

</body>

<script>

new Vue({

el:"#myApp",

data:{

arr:[

{

goodsTitle:"栗子",

goodsPrice:12

},

{

goodsTitle:"地板",

goodsPrice:34

}

]

},

components:{

goodsList:{

props:["info"],

template:`<div>

<h3>{{info.goodsTitle}}</h3>

<p>{{info.goodsPrice}}</p>

</div>`

}

}

})

</script>

12.动态组件

<!--动态组件  is属性的值即是所选用的组件名-->

<components :is="comArr[index]"></components>

案例说明:

<body>

<div id="myApp">

<input type="button" @click="changeIndex" value="换肤">

<!--动态组件  is属性的值即是所选用的组件名-->

<components :is="comArr[index]"></components>

</div>

</body>

<script>

const one = {

template:`<div style="background:red;">one</div>`

};

const two = {

template:`<div style="background:yellow;">two</div>`

};

const three = {

template:`<div style="background:pink;">three</div>`

};

const four = {

template:`<div style="background:deeppink;">four</div>`

};

new Vue({

el:"#myApp",

data:{

index:0,

comArr:["one","two","three","four"]

},

methods:{

changeIndex(){

this.index++;

if(this.index>this.comArr.length-1)

this.index=0;

}

},

components:{

one,

two,

three,

four

}

})

</script>

重点知识点归纳:

1、template有三种使用方法

1、直接赋值

template:`<div>1</div>`

2、通过script标签来定义

<script type="x/template" id="tp">

<div>2</div>

</script>

template:"#tp"

3、使用内置组件template

<template id="my">

<div>3</div>

</template>

template:"#my"

2.定义组件    局部组件   全局组件

局部组件:

new Vue({

components:{

one:{

子组件如何接收:

//将你要接收的数据进行设置

props:["num","age"]

template:`<div>one组件当中</div>`

}

}

})

全局组件:

Vue.component(componentName,config) //第一个参数是你组件的名字,第二个是给件的配置项

3.动态组件:<!--动态组件  is属性的值即是所选用的组件名-->

<components :is="组件名[index]"></components>

4.es6模块化:

如何导出: export const

如何引入:script 引入  通过import

5. 向下如何传      子组件如何接收。

通过props设置允许接收的属性名:

将你要接收的数据进行设置

props:["num","age"]

原文地址:https://www.cnblogs.com/wangwenxin123/p/11409979.html

时间: 2024-10-01 07:12:15

0810 vue 创建组件 模板 动态组件 传值的相关文章

Vue两种组件类型介绍:递归组件和动态组件

一递归组件 递归组件的特性就是可以在自己的template模板中调用自己本身.值得注意的它必须设置name属性. // 递归组件 recursive.vue <template> <div> <p>递归组件</p> <Recursion :count="count + 1" v-if="count < 3"></Recursion> </div> </template&g

Vue组件的操作-自定义组件,动态组件,递归组件

作者 | Jeskson 来源 | 达达前端小酒馆 v-model双向绑定 创建双向数据绑定,v-model指令用来在input,select,checkbox,radio等表单控件.v-model指令在内部使用不同的属性为不同的输入元素抛出不同的事件. v-mdel指令实现数据的双向绑定: <div> 用户名:<input type="text" v-model="name"> </div> 输入用户名是:{{name}} &l

Hibernate学习---第五节:普通组件和动态组件

一.普通组件映射配置 1.创建组件类,代码如下: package learn.hibernate.bean; /** * 组件类 */ public class Phones { private String companyPhone; private String homePhone; private String personalPhone; public Phones() { } public Phones(String companyPhone, String homePhone, St

动态组件与 v-once 指令

<!DOCTYPE html> <html> <head> <title></title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script src="./vue.js"></script> <!-- <script src="

vue2.0 父子组件通信 兄弟组件通信

父组件是通过props属性给子组件通信的来看下代码: 父组件: <parent> <child :child-com="content"></child> //注意这里用驼峰写法哦 </parent> data(){ return { content:'sichaoyun' }; } 子组件通过props来接受数据 第一种方法 props: ['childCom'] 第二种方法 props: { childCom: String //这里

vue教程3-03 vue组件,定义全局、局部组件,配合模板,动态组件

一.定义一个组件 定义一个组件: 1. 全局组件 var Aaa=Vue.extend({ template:'<h3>我是标题3</h3>' }); Vue.component('aaa',Aaa); *组件里面放数据: data必须是函数的形式,函数必须返回一个对象(json) 2. 局部组件 放到某个组件内部 var vm=new Vue({ el:'#box', data:{ bSign:true }, components:{ //局部组件 aaa:Aaa } }); 1

vue父组件向子组件动态传值的两种方法

在一些项目需求中需要父组件向子组件动态传值,比如我这里的需求是,父组件动态通过axios获取返回的图片url数组然后传给子组件,上传图片的子组件拿到该数组后进行遍历并展示图片 方法有两种, 方法一: props传值,这里注意一个问题,传过来的值需要用watch监听并赋值,否则这里获取到的是空数组   父组件: <uploadImg :width="200" :height="200" name="productImage" size=&qu

vue02----什么是组件、组件创建、全局组件、局部组件、组件嵌套、组件传值、为什么组件中的data不是一个对象而是一个函数

### 什么是组件? 将代码进行复用 组件是实例的拓展子类 组件继承自实例,实例有的组件大部分都有,稍有变异 ### 组件创建 创建组件模板的2种方式: 1.通过template标签     template:"#tpl" 2.通过字符串模板   template:"<h1>吴启浪</h1>" ### 全局组件 所有的实例都可以使用 Vue.component("wql",{ template:"<h1&g

【vue】父组件主动调用子组件 /// 非父子组件传值

一  父组件主动调用子组件: 注意:在父组件使用子组件的标签上注入ref属性,例如: <div id="home"> <v-header ref="header"></v-header> <hr> 首页组件 <button @click="getChildData()">获取子组件的数据和方法</button> </div> 父组件主动获取子组件的数据和方法: 1