vue起步

作者: i高安 | 来源:发表于2020-11-24 11:51 被阅读0次

一、Hello World

"Hello Wolrd是所有开发心中的光"。

1.1 使用原生js实现

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Hello World</title>
</head>
<body>
    <div id="app"></div>
    <script>
        var dom = document.getElementById("app");
        dom.innerHTML = "Hello World!"
    </script>
</body>
</html>

1.2 使用vue.js实现

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Hello World</title>
    <script src="vue.js"></script>
</head>
<body>
    <div id="app">{{content}}</div>
    <script>
        // var dom = document.getElementById("app");
        // dom.innerHTML = "Hello World!"
        var app = new Vue({
            el: "#app",
            data: {
                content: "Hello World"
            }
        })
    </script>
</body>
</html>

二、开发TodoList(v-model、v-for、v-on)

2.1 v-for

使用v-for循环list里的内容:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>TodoList</title>
        <script src="../vue.js"></script>
    </head>
    <body>
        <div id="app">
            <input type="text" />
            <button>提交</button>
            <ul>
                <li v-for="item in list ">{{item}}</li>
            </ul>
        </div>
        
        <script>
                var app = new Vue({
                    el:"#app",
                    data:{
                        list:['第一课的内容','第二课的内容']
                    }
                })
        </script>
    </body>
</html>

需求:在输入框里输入内容,添加到列表

image.png

2.2 v-on

v-on主要用于绑定事件:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>TodoList</title>
        <script src="../vue.js"></script>
    </head>
    <body>
        <div id="app">
            <input type="text" />
            <button v-on:click="handleBtnClick">提交</button>
            <ul>
                <li v-for="item in list ">{{item}}</li>
            </ul>
        </div>
        
        <script>
                var app = new Vue({
                    el:"#app",
                    data:{
                        list:['第一课的内容','第二课的内容']
                    },
                    methods:{
                        handleBtnClick:function(){
                            alert('click')
                        }
                    }
                })
        </script>
    </body>
</html>

在上面的代码中,给button绑定了一个handleBtnClick的方法,在methods里定义该方法,并补充逻辑。

2.3 v-model

v-model指数据的双向绑定。

举个栗子:

<input type="text" v-model="inputValue" />

data:{

 list:[],

 inputValue:''

},

当input框里inputValue改变时,data里inputValue值跟着改变。

测试:

image.png

可以明显看出,当input框没有值的时候,inputValue为空字符串。

image.png

当有值时,inputValue跟着改变。

针对2.1的需求,结合v-on与v-model可以实现:

当点击提交时,将data里inputValue的值赋给list,再用v-for循环。

<!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" />
            <button v-on:click="handleBtnClick">提交</button>
            <ul>
                <li v-for="item in list ">{{item}}</li>
            </ul>
        </div>
        
        <script>
                var app = new Vue({
                    el:"#app",
                    data:{
                        list:[],
                        inputValue:''
                    },
                    methods:{
                        handleBtnClick:function(){
                            this.list.push(this.inputValue);
                            this.inputValue = ''
                        }
                    }
                })
        </script>
    </body>
</html>

三、MVVM设计模式

model,view,viewmodel

面向数据进行编程,不涉及dom。

四、使用组件改造TodoList

<!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" />
            <button v-on:click="handleBtnClick">提交</button>
            <ul>
                <todo-item v-bind:content="item"
                           v-for="item in list">
                </todo-item>
            </ul>
        </div>
        
        <script>
            
            Vue.component("TodoItem",{
                props:['content'],
                template:"<li>{{content}}</li>"
            })
            
            var app = new Vue({
                el:"#app",
                data:{
                    list:[],
                    inputValue:''
                },
                methods:{
                    handleBtnClick:function(){
                        this.list.push(this.inputValue);
                        this.inputValue = ''
                    }
                },
            })
        </script>
    </body>
</html>

Vue.component定义的是一个全局组件。

在模板里,需要用两个花括号接收变量。

定义局部组件:

<!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" />
            <button v-on:click="handleBtnClick">提交</button>
            <ul>
                <todo-item v-bind:content="item"
                           v-for="item in list">
                </todo-item>
            </ul>
        </div>
        
        <script>
            
            // Vue.component("TodoItem",{
            //  props:['content'],
            //  template:"<li>{{content}}</li>"
            // })
            
            //定义一个局部组件
            var TodoItem = {
                props:['content'],
                template:"<li>{{content}}</li>"
            }
            var app = new Vue({
                el:"#app",
                //注册组件
                components:{
                    TodoItem:TodoItem
                },
                data:{
                    list:[],
                    inputValue:''
                },
                methods:{
                    handleBtnClick:function(){
                        this.list.push(this.inputValue);
                        this.inputValue = ''
                    }
                },
            })
        </script>
    </body>
</html>

五、简单的组件间传值

子组件向父组件传值:

子组件通过$emit触发父组件的状态,向上一层触发事件,上一层监听到子组件触发时,进行业务逻辑。

六、复习小结

v-on 可以简写为@

v-bind: 可以简写为:

相关文章

  • vue-cli 起步配置步骤

    Vue-Cli 是 vue 专用起步工具,用 Vue-Cli 起步能够:① 项目直接安装了Vue、Vue-Rout...

  • Vue 2.0 起步(3) 数据流vuex和LocalStora

    参考: Vue 2.0 起步(2) 组件及vue-router实例 - 微信公众号RSS Vue 2.0 起步(1...

  • Vue 基础

    Vue 起步 Vue V-for循环 (一) Vue V-for 循环(二) Vue v-for表格

  • Vue起步

    1. hello world 项目 打开chrome devtools 感受双向绑定

  • VUE 起步

    单页面 SPA 网页应用的关键在于路由, 过去一个个按钮都会跳转到一个个独立的页面, 由服务器端渲染, 填充相应的...

  • vue起步

    vue官方文档:cn.vuejs.org/v2/guide 兼容性 Vue不支持IE8及以下版本,因为Vue使用了...

  • Vue起步

    1 Hello world 2 TodoList 3 TodoList 改进

  • vue起步

    今天是我学习vue框架的第一个月,我知道什么是spa,什么事单页应用。 什么是大前端!~

  • vue起步

    vue是什么? Vue.js(读音 /vjuː/,类似于 view) 是一套构建用户界面的渐进式框架。与其他重量级...

  • Vue 起步

    安装vue Cli 全局安装 vue-cli 创建一个基于 webpack 模板的新项目 安装依赖,走你 查看Vu...

网友评论

    本文标题:vue起步

    本文链接:https://www.haomeiwen.com/subject/inliiktx.html