• vue学习(基础下)


    【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

           vue框架所涉及到的很多方法,其实在其他框架也都有涉及,但是没有一个框架像vue这样被大规模认可和使用。这里面可能有几点原因,第一,学习的门槛必须要足够的低,太复杂的东西一般不太容易推广;第二,必须要有立竿见影的效果,这样马上可以给人以反馈,提醒我们是否可以继续学下去;第三,要有活跃的社区,有了社区才能不断添加新的功能,并且fix之前存在的bug;第四,大公司的支持,靠志愿者的热情,开源的框架一般都是走不远的,有大公司出钱出力,这样才能不断推着框架不停向前走,给开发者以奖励,毕竟谁也不是生活在空气中的,总要过日子的。

            当让,闲话说了这么多,今天继续学习vue的其他特性。

    6、输入框的双向绑定

    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <!-- <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script> -->
    6. <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.min.js"></script>
    7. <title> 表单输入绑定</title>
    8. </head>
    9. <body>
    10. <div id="app">
    11. <input type="text" v-model="message" value="hello">
    12. <p> {{message}}</p>
    13. </input>
    14. </div>
    15. <script>
    16. var app = new Vue({
    17. el:"#app",
    18. data:{
    19. message:"Hello Vue!",
    20. }
    21. })
    22. </script>
    23. </body>
    24. </html>

            用输入框来理解双向绑定再适合不过了。如上面代码所示,网页中有一个输入框,绑定的数据是message,这样不管输入什么数据,v-model中的message都会传递给data中的message。除此之外,data中的mesage和{{message}}也做了绑定,这样才实现了真正的双向绑定。即输入框不管输入什么数据,都会在{{messaege}}实时修改回来。

    7、选择框的双向绑定

    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <!-- <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script> -->
    6. <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.min.js"></script>
    7. <title> 选择框</title>
    8. </head>
    9. <body>
    10. <div id="app">
    11. <select v-model="selected">
    12. <option disabled value="">请选择</option>
    13. <option>A</option>
    14. <option>B</option>
    15. <option>C</option>
    16. </select>
    17. <span> Selected:{{selected}}</span>
    18. </div>
    19. <script>
    20. var app = new Vue({
    21. el:"#app",
    22. data:{
    23. message:"Hello Vue!",
    24. selected:''
    25. }
    26. })
    27. </script>
    28. </body>
    29. </html>

            如果觉得输入框的双向绑定解释的还不是很清楚,可以通过选择框这个示例进一步了解一下。如上面代码所示,有一个选择框,内容分别是A、B、C,通过v-model和selected做了绑定。这样,用户在选择了不同的数值之后,selected数值就会发生修改。除此之外,data中的selected还和span中的{{selected}}做了绑定,这样,用户一旦做了不同选择,span中打印的数据就会立刻发生改变。所以,这也是一种双向绑定。

    8、组件基础

    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <!-- <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script> -->
    6. <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.min.js"></script>
    7. <title> 组件</title>
    8. </head>
    9. <body>
    10. <div id="app">
    11. <my-component-li> </my-component-li>
    12. </div>
    13. <script>
    14. Vue.component("my-component-li", {
    15. template:'
    16. Hello vue
    17. '
  • })
  • var app = new Vue({
  • el:"#app",
  • data:{
  • message:"Hello Vue!",
  • selected:''
  • }
  • })
  • </script>
  • </body>
  • </html>
  •         组件从功能上看,可以认为是模板。比如上面这段代码,定义了一个my-component-li的组件,对应的内容是

  • Hello vue
  • 。有了这个定义的模板之后,输入 ,浏览器就可以把my-component-li对应的template内容渲染上去了。

    9、带参数的组件

    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <!-- <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script> -->
    6. <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.min.js"></script>
    7. <title> 带参数组件</title>
    8. </head>
    9. <body>
    10. <div id="app">
    11. <my-component-li v-for="it in cities" v-bind:item="it"> </my-component-li>
    12. </div>
    13. <script>
    14. Vue.component("my-component-li", {
    15. props:["item"],
    16. template:'
    17. {{item}}
    18. '
  • })
  • var app = new Vue({
  • el:"#app",
  • data:{
  • cities:['beijing','shanghai','nanjing'],
  • selected:''
  • }
  • })
  • </script>
  • </body>
  • </html>
  •         和8中的组件不一样,这里的代码添加了一个item参数。同样,代码中定义了一个名为my-component-li的组件,参数是item,props中也做了说明。正因为有了props做铺垫,在my-component-li中可以通过v-bind把item和v-for中的it绑定在一起,实现循环输出了。

    10、计算属性

    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <!-- <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script> -->
    6. <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.min.js"></script>
    7. <title> 计算属性</title>
    8. </head>
    9. <body>
    10. <div id="app">
    11. <p> {{getCurrentTime()}}</p>
    12. <p> {{getCurrentTime1}}</p>
    13. </div>
    14. <script>
    15. var app = new Vue({
    16. el:"#app",
    17. data:{
    18. message:"Hello Vue!",
    19. },
    20. // 方法
    21. methods:{
    22. getCurrentTime:function(){
    23. return Date.now()
    24. }
    25. },
    26. // 计算属性
    27. computed:{
    28. getCurrentTime1:function(){
    29. return Date.now()
    30. }
    31. }
    32. })
    33. </script>
    34. </body>
    35. </html>

            计算属性听上去很复杂,其实并不复杂,完全可以把计算属性当成一个函数指针来看待。从上面这段网页中,有两个函数,一个是getCurrentTime,一个是getCurrentTime1。前者是放在methods里面,调用的时候,必须要添加括号,即getCurrentTime()。后者在computed里面,调用的时候,直接用getCurrentTime1即可,不需要后面添加括号。


    11、slot插槽

    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <!-- <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script> -->
    6. <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.min.js"></script>
    7. <title> slot插槽</title>
    8. </head>
    9. <body>
    10. <div id="app">
    11. <todo>
    12. <todo-title slot="todo-title-name" v-bind:title="title_data"></todo-title>
    13. <todo-content slot="todo-content-name" v-bind:content="content_data"></todo-content>
    14. </todo>
    15. </div>
    16. <script>
    17. Vue.component("todo", {
    18. template:"
      "
    19. })
    20. Vue.component("todo-title", {
    21. props:['title'],
    22. template:"
      {{title}}
      "
    23. })
    24. Vue.component("todo-content", {
    25. props:['content'],
    26. template:"
    27. {{content}}
    28. "
  • })
  • var app = new Vue({
  • el:"#app",
  • data:{
  • title_data:'标题',
  • content_data:'插槽'
  • }
  • })
  • </script>
  • </body>
  • </html>
  •         如果要掌握slot原理,最好要理解一下8和9中组件的内容。本质上,slot就是组件里面嵌套组件,这样就必须用到slot这个关键字。以上面这段代码为例,整个script中定义了三个组件,分别是todo、todo-title、todo-content。其中todo里面嵌套了两个组件,暂时命名为todo-title-name和todo-content-name。这样在实际使用的时候,就可以把todo-title和todo-title-name做绑定、todo-content和todo-content-name做绑定。不仅仅如此,还需要把todo-title中的title和data中的title_data、todo-content中的content和data中的content_data做绑定,这样才能实现整个数据的显示。

    12、自定义事件

    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <!-- <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script> -->
    6. <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.min.js"></script>
    7. <title> 自定义事件</title>
    8. </head>
    9. <body>
    10. <div id="app">
    11. <todo>
    12. <todo-title slot="todo-title-name" v-bind:title="title_data"></todo-title>
    13. <todo-content slot="todo-content-name" v-for="(city, index) in cities" v-bind:content="city" v-bind:offset="index" v-on:remove="remove_content_data(index)"></todo-content>
    14. </todo>
    15. </div>
    16. <script>
    17. Vue.component("todo", {
    18. template:"
      "
    19. })
    20. Vue.component("todo-title", {
    21. props:['title'],
    22. template: "
      {{title}}
      "
    23. })
    24. Vue.component("todo-content", {
    25. props:['content', 'offset'],
    26. //template:"
    27. {{content}}
    28. ",
    29. template:"
    30. {{offset}} -- {{content}}
    31. ",
    32. methods:{
    33. // 发送事件
    34. handle_button:function(event){
    35. this.$emit("remove")
    36. }
    37. }
    38. })
    39. var app = new Vue({
    40. el:"#app",
    41. data:{
    42. title_data:'插槽',
    43. cities:['beijing', 'shanghai', 'nanjing']
    44. },
    45. methods:{
    46. // 真正处理事件的地方
    47. remove_content_data: function(index) {
    48. this.cities.splice(index, 1)
    49. }
    50. }
    51. })
    52. </script>
    53. </body>
    54. </html>

            对于组件中的函数,如果想要操作全局数据,那么有必要通过自定义事周转一下来解决。比如上面这段代码,在todo-content中除了正常的offset、content打印之外,还有一个删除按钮。这样如果需要实现删除这个功能,那么有必要先定义一个remove事件。这样按钮按下的时候,框架会先调用handle_button这个函数,函数中emit一个remove事件,通过v-on实现了remove事件和回调函数remove_content_data的绑定,这样就会进一步调用remove_content_data函数。最终通过splice这个子函数实现了数据的删除。

            上面7个范例基本上是按照从易到难逐步升级的,建议一定要在掌握前面范例的基础上,再开始学习后面的内容,不然很容易越来越没有信心的。此外,一定要相信自己,一定可以学会vue的。

  • 相关阅读:
    异构混合阶多智能体系统编队控制的分布式优化
    mysql基于Java的学生请销假审批管理系统的设计与实现毕业设计源码130939
    第15章_锁: (表级锁、页级锁、行锁、悲观锁、乐观锁、全局锁、死锁)
    为什么说企业需要实施知识管理?
    【Acwing—单源最短路:建图】
    Qt 编写的程序如何只能运行一个实例
    vue使用高德地图轨迹活动效果demo(整理)
    Java的反射慢在哪?
    抠图,水印-----ps
    LeetCode笔记:Weekly Contest 320
  • 原文地址:https://blog.csdn.net/feixiaoxing/article/details/126900856