- 开发无止境 -
Data: 2015-11-09 23:51:55Form: JournalClick: 7
vue
文件,分三部分 <template></template>
对应 html
代码<script></script>
对应 js
代码<style></style>
对应 css
代码{{}}
进行插值、数据绑定defineComponent
函数,只是对 setup
函数进行封装,返回 options
的对象。defineComponent
最重要的是:在 TypeScript
下,给予了组件 正确的参数类型推断。# 1、单独写双大括号,是没有数据的,因为数据是从js里来的
# 1.1、在template标签里,必须有个最外层的标签
<template>
<div>我是:{{ ouyangke }}</div>
</template>
# 2、js 返回 ouyangke 这个数据
# 2.1、ouyangke相当于下标,"欧阳克"相当于值
# 2.2、export default(es6默认导出) 一个文件只能有一个
# 2.3、data(){},交互数据,也是M层。return{},数据要返回。
<script>
export default {
data() {
return {
ouyangke: "欧阳克"
};
}
};
</script>
<template>
<div>
<div>{{ ouyangke+zhutianpeng }}</div>
<div>{{ num1+num2 }}</div>
</div>
</template>
<script>
export default {
data() {
return {
ouyangke: "欧阳克",
zhutianpeng : "朱天蓬",
num1 : 20,
num2 : 10
};
}
};
</script>
<template>
<div>
<div>{{ ouyangke+zhutianpeng }}</div>
<div>{{ num1+num2 }}</div>
<div>{{ fun() }}</div>
</div>
</template>
<script>
export default {
data() {
return {
ouyangke: "欧阳克",
zhutianpeng : "朱天蓬",
num1 : 20,
num2 : 10
};
},
methods:{
fun(){
console.log('方法1');
// this 调用data里的数据
console.log(this.ouyangke);
return "方法1";
},
fun1(){
console.log('方法2');
// this 调用metods里的方法
this.fun();
}
}
};
</script>
<template>
<div>
<div>{{ boor ? '真' : '假' }}</div>
</div>
</template>
<script>
export default {
data() {
return {
boor: true
};
}
};
</script>
<template>
<div>
<!-- 这是一个语句,而非表达式 -->
<div>{{ var a = 1 }}</div>
<!-- 条件控制也不支持,请使用三元表达式 -->
<div>{{ if (boor) { return '真' } }}</div>
</div>
</template>
export default
的 option
构造(选项)构造(选项) | 描述 |
---|---|
name | 绑定标签名 |
data | 交互数据 |
methods | js 方法 |
computed | 计算属性 |
components | 组件 |
props | 组件之间数据交互 |
setup | 组合API |
指令 | 描述 |
---|---|
v-model | 指令在表单 <input> 、<textarea> 及 <select> 元素上创建双向数据绑定 |
v-once | 只渲染元素和组件一次 |
v-text | 更新元素的 textContent ,跟插值效果一样 |
v-html | 更新元素的 innerHTML |
v-pre | 跳过这个元素和它的子元素的编译过程,示原始 Mustache 标签 |
v-bind: | 动态地绑定属性 |
# 1、`v-model` 指令在表单 `<input>`、`<textarea>` 及 `<select>` 元素上创建双向数据绑定
<template>
<div>
<div>{{ ouyangke }}</div>
<input type="text" v-model:value="ouyangke">
</div>
</template>
<script>
export default {
data() {
return {
ouyangke: "欧阳克"
};
}
};
</script>
# 2、`v-once` 只渲染元素和组件一次
<template>
<div>
<div>{{ ouyangke }}</div>
<input type="text" v-model="ouyangke">
<div v-once>{{ ouyangke }}</div>
</div>
</template>
<script>
export default {
data() {
return {
ouyangke: "欧阳克"
};
}
};
</script>
# 3、`v-text` 更新元素的 `textContent`,跟插值效果一样
<template>
<div>
<div>{{ ouyangke }}</div>
<input type="text" v-model="ouyangke">
<div v-text="ouyangke"></div>
<div v-text="ouyangke">这里不能在写文字</div>
</div>
</template>
<script>
export default {
data() {
return {
ouyangke: "欧阳克"
};
}
};
</script>
# 4、`v-html` 更新元素的 `innerHTML`
# 4.1、注意:网页中动态渲染任意的HTML可能非常危险,很容易导致XSS攻击,最好对可信的内容使用v-html指令,绝对不能让用户输入内容使用这个指令
<template>
<div>
<div>{{ htmlcode }}</div>
<div v-html="htmlcode"></div>
</div>
</template>
<script>
export default {
data() {
return {
htmlcode: "<h1 style='color:red;'>欧阳克</h1>"
};
}
};
</script>
# 5、`v-pre` 跳过这个元素和它的子元素的编译过程,示原始 `Mustache` 标签
<template>
<div>
<div v-pre>{{ htmlcode }}</div>
</div>
</template>
<script>
export default {
data() {
return {
htmlcode: "<h1 style='color:red;'>欧阳克</h1>"
};
}
};
</script>
# 6、`v-bind` 动态地绑定属性
<template>
<div>
<a href="https://www.php.cn" title="php中文网">{{ name }}</a>
<a href="https://www.php.cn" title="{{name}}">{{ name }}</a>
<a href="https://www.php.cn" v-bind:title="name">{{ name }}</a>
// 语法糖,缩写 :
<a :href="url" :title="name">{{ name }}</a>
</div>
</template>
<script>
export default {
data() {
return {
name: "php中文网",
url : "https://www.php.cn"
};
}
};
</script>
# 6.1、常用的绑定style和class属性,四种用法(字符串、数组、对象、方法)
<template>
<div>
// 字符串变量写法
<div style="color: red; font-size: 24px" :style="style">{{ name }}</div>
// 数组写法
<div style="color: red; font-size: 24px" :style="[arr1, arr2, 'background:#33aa33']">{{ name }}</div>
// 对象写法
<div style="color: red; font-size: 24px" :style="{width:obj,height:obj,background:'#33aa33'}">{{ name }}</div>
</div>
</template>
<script>
export default {
data() {
return {
name: "php中文网",
style: "width:200px;height:200px;background:#33aa33",
arr1:"width:200px",
arr2:"height:200px",
obj:"200px"
};
}
};
</script>
# 6.2、class属性,使用
<template>
<div>
// 字符串变量写法
<div class="div" :class="class1">{{ name }}</div>
// 单引号、使用class名,跟之前写到class里没区别
<div class="div" :class="['fs24']">{{ name }}</div>
// 对象写法(用的最多的):class名作为下标
<div class="div" :class="{fs24:true}">{{ name }}</div>
// 配合点击事件,可以显示隐藏
<button @click="show = !show">点击</button>
<div class="div hide" :class="{ show: show }">{{ name }}</div>
// 混合使用
<div class="div hide" :class="[{ show: show },'fs24']">{{ name }}</div>
</div>
</template>
<script>
export default {
data() {
return {
name: "php中文网",
class1: "fs24",
show: true,
};
}
};
</script>
<style lang="scss">
.div {
width: 200px;
height: 200px;
background: #33aa33;
}
.fs24 {
font-size: 24px;
}
.hide {
display: none;
}
.show {
display: block;
}
</style>
# 1、老版本 连接字符串方式
<template>
// 第一种方式
<div>{{ ouyangke}}-{{phpcn}}</div>
// 第二种方式
<div>{{ ouyangke + '-' + phpcn}}</div>
// 第三种方式
<div>{{fun()}}</div>
</template>
<script>
export default {
data() {
return {
ouyangke: "欧阳克",
phpcn : "php中文网"
};
},
methods : {
fun(){
return this.ouyangke + '-' + this.phpcn
}
}
};
</script>
# 2、computed 计算属性
<template>
<div>{{ handle }}</div>
</template>
<script>
export default {
data() {
return {
ouyangke: "欧阳克",
phpcn : "php中文网"
};
},
computed : {
handle(){
return this.ouyangke + "-" + this.phpcn;
},
// 两种写法一样的
handle(){
get(){
return this.ouyangke + "-" + this.phpcn;
}
}
}
};
</script>
# 2.1、set方法
<template>
<div>{{ handle }}</div>
<input type="text" v-model="ouyangke" />
<input type="text" v-model="handle" />
</template>
<script>
export default {
data() {
return {
ouyangke: "欧阳克",
phpcn : "php中文网"
};
},
computed : {
handle : {
get(){
return this.ouyangke + "-" + this.phpcn;