- 开发无止境 -
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;