我的Vue.js的学习之旅记录(1)

学习途径:vue官网慕课网
一.
所需知识储备:js,es6,webpack,npm

1.nuxt框架围绕vue推出
2.weex可以用vue写app

所用的知识

Vue.js 是什么
Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。

如果你想在深入学习 Vue 之前对它有更多了解,我们制作了一个视频,带您了解其核心概念和一个示例工程。

如果你已经是有经验的前端开发者,想知道 Vue 与其它库/框架有哪些区别,请查看对比其它框架。


用vue写出hello world

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>hello world</title>
    <script src = './vue.js'></script>
</head>
<body>
  <div id = "app">{{content}}</div>    <!--{{content}}调用data内对应的数据-->

  <script>
     /*var dom = document.getElementById("app");
     dom.innerHTML = "hello world";
    setTimeout(function(){
      dom.innerHTML = "bye world";
    },2000)                             //隔两秒进行换内容
    */
    var app = new Vue({
      el: '#app',           //实例负责管理的dom范围
      data:{                //定义数据
        content:'hello world'
      }
    })
    setTimeout(function(){
      app.$data.content = 'bey world'
    },2000)
  </script>
</body>
</html>

MVVM模式的初步接触
笔记:
几个关键点:
1.首先通过new创建Vue实例
2.Vue实例中的el属性会指定Vue实例要接管dom中对应的元素
3.v-on:为元素绑定事件
4.v-model:data中数据与元素中数据的双向绑定
5.v-for:循环提取一个数组或一个对象中的所有项
6.Vue最大的特点就是去除了对dom的直接操作,只用关心数据是如何变化的

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>ToDoList</title>
    <script src = './vue.js'></script>
</head>
<body>
  <div id = "app">
    <input type="text" v-model="inputValue"/>  <!--v-model数据的双向绑定-->
    <button v-on:click="handleBtnClick">submit</button>
    <ul>
      <li v-for = "item in list">{{item}}</li>   <!--标签属性v-for-->
    </ul>                                        <!--item是循环的每一项内容,list指的是data处的list-->
  </div>
   <!--MVVM设计模式的初步探索-->
  <script>
      var app = new Vue({
        el:'#app',
        data:{
          list:[],
          inputValue:''
        },
        methods:{
          handleBtnClick:function(){
            this.list.push(this.inputValue)
            this.inputValue = ''
            //alert(this.inputValue)    //data中的inputValue
          }
        }
      })
  </script>
</body>
</html>

1.MVP模式
M:模型层
V:视图层
P:控制器层
View发出一个事件交给Presenter,控制器调取model或者直接操作view,presenter是核心,大部分的工作都在presenter层。
2.MVVM
M:负责储存数据(模型层)
V:负责显示数据(视图层) 面向数据进行编程
VM:Vue自带的层
mvvm模型


前端组件化
什么东西都揉在一起根本不好维护
特别是大型项目
所以我们把页面切分成几个部分,就是组件,也就是组件化的概念。


将的我的ToDoList组件化

Vue.component() 提供全局组件的一个方法

遭遇报错,为什么老师写的不一样就可以运行????一脸懵逼???
(·····因为我把TodoItem写成ToDoItem了 干 !)

[Vue warn]: Unknown custom element: <todo-item> - did you register the component correctly? For recursive components, make sure to provide the "name" option.

(found in <Root>)
<todo-item v-for="item in list"></todo-item>
Vue.component("ToDoItem",{      //vue.component()创建全局组件的一个方法
    template:"<li>Todo item</li>"          //写一个模板
  })

上述Vue.component中的ToDoItem改为todo-item即可

v-bind和v-on的缩写

<!-- 完整语法 -->
<a v-bind:href="url"></a>
<!-- 缩写 -->
<a :href="url"></a>

<!-- 完整语法 -->
<a v-on:click="doSomething"></a>
<!-- 缩写 -->
<a @click="doSomething"></a>

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>ToDoList</title>
     <script src = './vue.js'></script>
</head>
<body>
  <div id = "app">
    <div>
        <input type="text" v-model="inputValue"/>
        <button @click="handleBtnClick">submit</button>
    </div>
    <ul>
      <todo-item :content ="item"
                 v-for="item in list">
      </todo-item>      <!--v-bind子组件传入一个绑定值-->
    </ul>
  </div>

  <script>

  /*
    Vue.component("TodoItem",{      //vue.component()创建全局组件的一个方法
    props: ['content'],                     //从父组件接收内容
    template:"<li>{{content}}</li>" ,         //写一个模板 插值表达式来写content
  })
  */


  var TodoItem = {
    props: ['content'], 
    template:"<li>{{content}}</li>"  ,
  }

      var app = new Vue({
        el:'#app',
        components: {
        TodoItem:TodoItem      //通过对象来注册局部组件 注册到Vue实例中
        }, 
        data:{
          list:[],
          inputValue:''
        },
        methods:{
          handleBtnClick:function(){
            this.list.push(this.inputValue)
            this.inputValue = ''
          }
        }
      })
  </script>
</body>
</html>

TodoList组间传值

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>TodoList组件间传值</title>
        <script src = "./vue.js"></script>
    </head>
    <body>
    <!--这一次的学习中我们涉及到了子组件向父组件传值这个情况-->
        <div id ="root">
            <div>
                <input type = "text" v-model="todoValue" />
                <button @click = "handleBtnClick">Submit</button>
            </div>
            <ul>
                <todo-item  v-bind:content="item"
                            v-bind:index="index"            
                            v-for="(item,index) in list"
                            v-on:delete="handleItemDelete"> <!--父组件监听delete事件-->
                </todo-item>
            </ul>
        </div>

        <script>
            var TodoItem = {
                props:['content','index'],
                template:"<li v-on:click='handleItemClick'>{{content}}</li>",
                methods: {
                    handleItemClick: function(){
                        //$emit向外触发一个delete事件,也就是像父组件所监听的内容传值
                        this.$emit("delete",this.index);  
                    }
                }
            }

            var app = new Vue({
                el:'#root',
                components:{
                    TodoItem: TodoItem
                },
                data:{
                    todoValue:"",
                    list:[]
                },
                methods:{
                    handleBtnClick:function(){
                        this.list.push(this.todoValue)
                        this.todoValue=""
                    },
                    handleItemDelete:function(index){
                        this.list.splice(index,1);      //splice(index,1) 从 index 开始删除1个元素
                    }
                }

            })
        </script>
    </body>
</html>

猜你喜欢

转载自blog.csdn.net/qq_39317423/article/details/81750945
今日推荐