一、vue中的插值表达式

  1. <template>
  2. <div id="app">
  3. <div>{{msg}}</div>
  4. </div>
  5. </template>
  6. <script>
  7. export default {
  8. name: "app",
  9. data() { //data是一个函数,因为是组件
  10. return {
  11. msg: "hello world"
  12. };
  13. };
  14. </script>

二、v-for必须加:key

  1. <template>
  2. <div id="app">
  3. <p v-for="item of arr" :key="item">{{item}}</p>
  4. </div>
  5. </template>
  6. <script>
  7. export default {
  8. name: "app",
  9. data() {
  10. return {
  11. arr: ["html", "css", "javascript"]
  12. };
  13. },
  14. </script>

三、事件@click

  1. <template>
  2. <div id="app">
  3. <div @click="handleClick">{{msg}}</div>
  4. </div>
  5. </template>
  6. <script>
  7. export default {
  8. name: "app",
  9. data() {
  10. return {
  11. msg: "hello world",
  12. };
  13. },
  14. //事件集中写在methods属性中
  15. methods:{
  16. handleClick(){
  17. this.msg = "change"
  18. }
  19. }
  20. };
  21. </script>

四、v-html

  1. <div>
  2. <div v-html="msg"></div>
  3. </div>
  4. <script>
  5. var vm = new Vue({
  6. el:"#app",
  7. data:{
  8. msg:"<h1>hello world</h1>"
  9. }
  10. })
  11. </script>

五、v-once

只渲染一次,不重新更新视图。

六.v-show

如果频繁去切换DOM可以使用v-show

七、v-if v-else

八、v-for

九、key的作用为了区分元素

key就是为了给DOM元素一个唯一的标识符

  1. <body>
  2. <div id="app">
  3. <div v-if="flag">
  4. <span>网易云音乐</span>
  5. <input type="text">
  6. </div>
  7. <div v-else>
  8. <span>qq音乐</span>
  9. <input type="text">
  10. </div>
  11. </div>
  12. <script>
  13. var vm = new Vue({
  14. el:"#app",
  15. data:{
  16. flag:true
  17. }
  18. })
  19. </script>
  20. </body>

不加key,input输入框qq的值改变,网易云的输入框应该是没变的切换过去,还是qq的输入框。

nav.gif
解决方案 给input输入框添加key

  1. <div id="app">
  2. <div v-if="flag">
  3. <span>网易云音乐</span>
  4. <input type="text" key="wangyi">
  5. </div>
  6. <div v-else>
  7. <span>qq音乐</span>
  8. <input type="text" key="qq">
  9. </div>
  10. </div>

1.1 for-key

  1. <body>
  2. <div id="app">
  3. <p v-for="(item,index) of arr"><input type="checkbox">{{item.id}} {{item.name}}</p>
  4. </div>
  5. <script>
  6. var vm = new Vue({
  7. el:"#app",
  8. data:{
  9. arr:[
  10. {id:1,name:"小米"},
  11. {id:2,name:"苹果"},
  12. {id:3,name:"华为"},
  13. ]
  14. }
  15. })
  16. </script>
  17. </body>

不使用key,使用unshift方法添加数组,勾选checkbox会出问题。
key.gif

我选中的是苹果,结果变为小米。因为这里没有添加key,默认选中的是第二个,重新渲染还是第二元素被选中。

十、filters—过滤器

类似于小程序的中wxs

  1. <div id="app">
  2. {{msg | format}}
  3. </div>
  4. <script>
  5. var vm = new Vue({
  6. el:"#app",
  7. data:{
  8. msg:"99"
  9. },
  10. filters:{
  11. format(value){
  12. return "$"+value
  13. }
  14. }
  15. })
  16. </script>

1.1 filters传参

  1. <div id="app">
  2. {{msg | format("好的")}}
  3. </div>
  4. <script>
  5. var vm = new Vue({
  6. el:"#app",
  7. data:{
  8. msg:"99"
  9. },
  10. filters:{
  11. //value是mgs add是format传递过来的参数
  12. format(value,add){
  13. return "$"+value+add
  14. }
  15. }
  16. })
  17. </script>