[关闭]
@File 2019-10-08T09:28:32.000000Z 字数 4636 阅读 149

vue

web


相关连接

官方文档

引入js

vue 下载

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

js 调用

1. new Vue({}) 基本格式

  1. new Vue({
  2. // 绑定一个节点
  3. el: '#id',
  4. // 设置数据
  5. data() {
  6. return {
  7. name: '李大爷',
  8. age: 18
  9. }
  10. }
  11. })

2. methods 定义方法

  1. new Vue({
  2. el: '#id',
  3. data() {
  4. return {}
  5. },
  6. // 设置方法
  7. methods: {
  8. method1() {},
  9. method2() {}
  10. }
  11. })

3. watch 监听属性

  1. <div id="app">
  2. <input v-model="input1" type="text">
  3. <input v-model="input2" type="text">
  4. <input v-model="input3" type="text">
  5. </div>
  6. <!-- js -->
  7. <script>
  8. new Vue({
  9. el: '#app',
  10. data() {
  11. return {
  12. input1: '',
  13. input2: '',
  14. input3: ''
  15. }
  16. },
  17. watch: {
  18. // input3 值改变时,同时修改 input1 和 input2 的值
  19. input3: function(val) {
  20. this.input1 = val;
  21. this.input2 = val;
  22. }
  23. }
  24. })
  25. </script>

4. computed 计算属性

  1. <div id="app">
  2. <input v-model="input1" type="text">
  3. <input v-model="input2" type="text">
  4. <input v-model="input3" type="text">
  5. </div>
  6. <!-- js -->
  7. <script>
  8. new Vue({
  9. el: '#app',
  10. data() {
  11. return {
  12. input1: '',
  13. input2: ''
  14. }
  15. },
  16. computed: {
  17. // 默认调用的是 get 方法
  18. /*
  19. input3: function() {
  20. return this.input1 +' '+ this.input2;
  21. }
  22. */
  23. // 设置 set 方法
  24. // input3 被修改时,同时更新 input1 和 input2
  25. input3: {
  26. // get 中调用到的属性被修改时触发
  27. get: function() {
  28. return this.input1 +' '+ this.input2;
  29. },
  30. // 自身被修改时触发 watch 一样的效果
  31. set: function(val) {
  32. var names = val.split(' ');
  33. this.input1 = names[0];
  34. this.input2 = names[names.length - 1];
  35. }
  36. }
  37. }
  38. })
  39. </script>

5. created() vue构造函数

6. mounted()

标签属性

1. {{}} 取值

  1. <div id="app">
  2. <!-- 拿到 message 的值 -->
  3. <p>{{ message }}</p>
  4. </div>
  5. <!-- js -->
  6. <script>
  7. new Vue({
  8. el: '#app',
  9. data() {
  10. return {
  11. message: '李大爷'
  12. }
  13. }
  14. })
  15. </script>

2. v-text 赋值文本

  1. <div id="app">
  2. <!-- 拿到 message 的值 -->
  3. <div v-text="message"></div>
  4. </div>
  5. <!-- js -->
  6. <script>
  7. new Vue({
  8. el: '#app',
  9. data() {
  10. return {
  11. message: '李大爷'
  12. }
  13. }
  14. })
  15. </script>

3. v-html 赋值标签

  1. <div id="app">
  2. <!-- 拿到 message 的值 -->
  3. <div v-html="message"></div>
  4. </div>
  5. <!-- js -->
  6. <script>
  7. new Vue({
  8. el: '#app',
  9. data() {
  10. return {
  11. message: '<a href="https://cn.vuejs.org/">李大爷</a>'
  12. }
  13. }
  14. })
  15. </script>

4. v-show 判断显示

  1. <div id="app">
  2. <!-- v-if="boolear" 决定是否显示<p>标签 -->
  3. <p v-show="age < 20">
  4. {{ name }}
  5. </p>
  6. </div>
  7. <!-- js -->
  8. <script>
  9. new Vue({
  10. el: '#app',
  11. data() {
  12. return {
  13. name: '李大爷'
  14. age: 18
  15. }
  16. }
  17. })
  18. </script>

5. v-if 条件判断

  1. <div id="app">
  2. <!-- v-if="boolear" 决定是否输出<p>标签 -->
  3. <p v-if="age < 18">
  4. {{ name }}
  5. </p>
  6. <!-- else if -->
  7. <p v-else-if="age == 18">
  8. {{ name }} 成年了
  9. </p>
  10. <!-- else -->
  11. <p v-else>
  12. 不是 {{ name }}
  13. </p>
  14. </div>
  15. <!-- js -->
  16. <script>
  17. new Vue({
  18. el: '#app',
  19. data() {
  20. name: '李大爷'
  21. age: 18
  22. }
  23. })
  24. </script>

6. v-on | @ 事件

事件修饰符

.stop:阻止事件冒泡
.prevent:提交事件不重载页面
.capture:添加事件侦听器时使用事件捕获模式
.self:只当事件在该元素本身(而不是子元素)触发时触发回调
.once:事件只能触发一次(2.1.4)
.passive:滚动行为将会立即触发(2.3.0)

  1. <!-- v-on 格式:点击是调用 doSomething 方法 -->
  2. <a id="app" v-on:click="doSomething"></a>
  3. <!-- @ 格式:点击是调用 doSomething 方法 -->
  4. <a id="app" @click="doSomething"></a>
  5. <!-- js -->
  6. <script>
  7. new Vue({
  8. el: '#app',
  9. methods: {
  10. doSomething() {
  11. alert('李大爷');
  12. }
  13. }
  14. })
  15. </script>

7. v-for 循环

  1. <div id="app">
  2. <ul>
  3. <!-- 方式一:只有 value -->
  4. <li v-for="member in family">
  5. {{ member.name }}
  6. </li>
  7. <!-- 方式二:完整格式(值,键,下标)-->
  8. <li v-for="(member,key,index) in family" :key="index">
  9. {{ index }}-{{ member.name }}
  10. </li>
  11. <!-- 方式三:按次数循环 -->
  12. <li v-for="num in 10">
  13. {{ num }}
  14. </li>
  15. </ul>
  16. </div>
  17. <!-- js -->
  18. <script>
  19. new Vue({
  20. el: '#app',
  21. data() {
  22. return {
  23. family: [
  24. { name: '李大爷' },
  25. { name: '胡大妈' }
  26. ]
  27. }
  28. }
  29. })
  30. </script>

8. v-model 数据绑定

  1. <div id="app">
  2. <p>{{ message }}</p>
  3. <input v-model="message">
  4. </div>
  5. <!-- js -->
  6. <script>
  7. new Vue({
  8. el: '#app',
  9. data() {
  10. return {
  11. message: ''
  12. }
  13. }
  14. })
  15. </script>

9. v-bind | :

其他骚操作
:checked="num == 100" 返回boolean值
:class="{ blue-btn:isBlue, red-btn:!isBlue }" 根据isBlue响应式属性判断
:class="classObj" classObj里可以存多个属性
:class="classObj[btn, red-btn]" 只拿其中两个属性的值
:class="classObj[btn, {blue-btn:isBlue}]" 嵌套{}
:class="classObj[btn, isBlue? blue-btn: red-btn]" 嵌套判断

  1. <div id="app">
  2. <!-- 实际显示:<input type="hidden"> -->
  3. <!-- 方式一: -->
  4. <input v-bind:type="type">
  5. <!-- 方式二: -->
  6. <input :type="type">
  7. </div>
  8. <!-- js -->
  9. <script>
  10. new Vue({
  11. el: '#app',
  12. data() {
  13. return {
  14. // 通过响应式参数改变input的类型
  15. type: 'hidden'
  16. }
  17. }
  18. })
  19. </script>

10. v-once 赋值一次,不动态修改

  1. <div id="app">
  2. <!-- 不会修改 -->
  3. <input v-once v-model="name" type="text">
  4. <!-- 被包含的子节点属性也不会修改 -->
  5. <p v-once> {{ name }} </p>
  6. <!-- 会被修改 -->
  7. <input v-model="name" type="text">
  8. <input v-model="update" type="text">
  9. </div>
  10. <!-- js -->
  11. <script>
  12. new Vue({
  13. el: '#app',
  14. data() {
  15. return {
  16. name: '李大爷',
  17. update: ''
  18. }
  19. },
  20. watch: {
  21. // update 被修改时 同时修改 name
  22. update: function(val) {
  23. this.name = val;
  24. }
  25. }
  26. })
  27. </script>

11. v-slot | # 插槽

vue部署和组件化

属性响应式更新

响应式更新: vue.data 中定义的属性更新时会对全局造成影响,动态改变所有被调用的地方,重写赋值。

  • 对普通属性可以通过 "=" 直接修改
  • 数组或对象中的属性需要使用方法修改(或者完全覆盖),"=" 不生效

1. js 原生方法

push(elem...) 末尾添加一个或多个元素
unshift(elem...) 开头添加一个或多个元素
pop() 删除并获取最后一个元素
shift() 删除并获取第一个元素
splice(index,rmLen,elem...) 插入或替换一个或多个元素
sort(func(p1,p2)) 排序
reverse() 颠倒顺序

2. vm.$set | Vue.set

  1. let vm = new Vue({
  2. el: '#app',
  3. data() {
  4. return {
  5. arr: ['李大爷','胡大妈']
  6. map: {
  7. name: '李大爷'
  8. }
  9. }
  10. }
  11. });
  12. // 代替 vm.arr[0] = '李大爷888';
  13. vm.$set(vm.arr, 0, '李大爷888');
  14. // 代替 vm.arr = ['李大爷888','胡大妈666'];
  15. Vue.set(vm,'arr',['李大爷888','胡大妈666']);
  16. // 添加响应式属性
  17. // 注意:根属性无法添加和删除(根属性:arr、map)
  18. vm.$set(vm.map, 'age', 18);
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注