前端学习:基本使用

时间:2024-12-19 07:01:23

Vue教程文档:
/v2/guide/

定义

实例: new Vue()
挂载点: el
数据:data
模板: template
方法:methods
计算属性: computed类似 variable = variable()
侦听器: watch 一旦数据变化都会触发
参数:props
组件components
组件与实例的关系:每一个组件都是一个Vue实例
父组件与子组件交互:

  • 父组件通过 属性 传递给子组件参数
  • 子组件通过 发布事件$emit 传递给父组件参数,前提是父组件需要先 注册事件

使用

变量使用:使用插值表达式 {{ variable }}
文本替换:v-text="variable"
内容替换:v-html="content"
事件绑定:v-on:click="function" 等价于@click="function"
属性绑定: v-bind:title="variable" 等价于 :title="variable"
双向数据绑定: v-model="variable"
show语句:v-show="bool" 为真时显示
if语句:v-if="bool" 为真时加入dom
for语句:<li v-for="(item, index) of list" :key="index">{{item}}</li>

实例

第一个Vue实例 插值表达式

    <div id="hello">{{ hello }}</div>  

    <script>
        //Vue实例
        new Vue({
            el: "#hello",
            data: {
                hello: "hello world"
            }
        })
    </script>

hello world
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

挂载点, 实例, 模板

    <div id="root">
    <!-- 挂载点 -->
    </div>

    <script>
        // 实例
        new Vue({
            el: "#root",
            // 模板, 如果实例中没有定义模板,则默认使用挂载点里边的dom元素为模板
            template: "<h1>hello template {{ msg }}</h1>",
            data: {
                msg: "this is message",
            }
        })
    </script>


hello template this is message
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

文本替换


    <div id="text" v-text="number"></div>

    <script>
        new Vue({
            el: "#text",
            data: {
                number: 123456,

            }
        })
    </script>

123456
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

内容替换 事件绑定

方法 v-on:等价于@


    <div id="html" v-on:click="handleClick" @dblclick="handleDoubleClick" v-html="content"></div>

    <script>
        new Vue({
            el: "#html",
            data:{
                content: "<h1>this is content</h1>"
            },
            methods: {
                handleClick: function(){
                    this.content = "<h1> click</h1>"
                },
                handleDoubleClick: function(){
                    this.content = "<h1>double click</h1>"
                }
            }
        })
    </script>


this is content
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

属性绑定
使用v-bind之后,相单于一个js表达式 等价于:title

    <div id="bind" v-bind:title="'hello ' + title">this is title</div>

    <script>
        new Vue({
            el:"#bind",
            data: {
                title: "this is a title"
            }
        })
    </script>


this is title
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

双向数据绑定


    <div id="db-bind">
        <input type="text" v-model="content">
        <div>{{ content }}</div>
    </div>

    <script>
        new Vue({
            el:"#db-bind",
            data: {
                content: "this is data double bind"
            }
        })
    </script>



this is data doubldasdase bind
this is data doubldasdase bind
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

计算属性


    <div id="computed">
        <input type="text" v-model="firstName">
        <input type="text" v-model="lastName">
        <div>{{ fullName }}</div>
        <div>{{ count }}</div>
    </div>

    <script>
        new Vue({
            el:"#computed",
            data: {
                firstName: "",
                lastName: "",
                count: 0
            },
            // 计算属性
            computed: {
                fullName: function(){
                    return this.firstName + " " + this.lastName
                }
            },
            // 侦听器, 一旦数据变化都会触发
            watch: {
                fullName: function(){
                    this.count ++
                }
            }

        })
    </script>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

v-if v-show v-for


    <div id="vif">
        <div v-if="show">v-if从dom中移除(适合一次操作)</div>
        <div v-show="show">v-show从dom中隐藏(适合多次操作)</div>
    <button @click="handleClick">toggle</button>
    <ul>
        <li v-for="item of list">{{item}}</li>

        <!-- 以下方法增加key,可以提升性能 -->
        <li v-for="(item, index) of list" :key="index">{{item}}</li>
    </ul>
</div>

    <script>
        new Vue({
            el: "#vif",
            data: {
                show: true,
                list: ["first", "second", "third", "fourth"]
            },
            methods: {
                handleClick: function(){
                    this.show = !this.show
                }
            }
        })
    </script>

v-if从dom中移除(适合一次操作)
v-show从dom中隐藏(适合多次操作)
toggle
first
second
third
fourth
first
second
third
fourth
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

TodoList实例


    <div id="todolist">
        <input type="text" v-model="inputValue">
        <button @click="handleSubmit">确定</button>
        <!-- 普通方式添加 -->
        <ul>
           <global></global>
            <li v-for="(item, index) of list" :key="index">{{ item }}</li>
            <local></local>
        </ul>

        <!-- 通过全局组件 -->
        <ul>
           <todo-item 
                v-for="(item, index) of list" 
                :key="index" 
                :content="item" 
                :index="index"
                @delete="handleDelete"   
                ><!-- 通过全局组件 -->

           </todo-item> 
        </ul>
    </div>
    <script>

        // 全局组件
        ("global", {
            template: "<li>item-global</li>"
        })

        // 组件与实例的关系:每一个组件都是一个Vue实例,
        ("todo-item", {
            props: ["content", "index"], //接收参数,通过属性传递值
            template: '<li @click="handleClick">{{content}} {{index}}</li>',  //显示
            methods: {
                handleClick: function(){
                    this.$emit("delete", this.index)  //子组件通过发布和父组件通讯
                }
            }
        })

        // 父组件与子组件通讯,交互
        // 父组件通过 属性 传递给子组件参数
        // 子组件通过 发布事件 传递给父组件参数,前提是父组件需要先 注册事件

        // 局部组件
        var Local = {
            template: "<li>item-local</li>"
        }

        new Vue({
            el:"#todolist",
            // 注册局部组件
            components: {
                "local": Local
            },
            data:{
                inputValue: "",
                list: []
            },
            methods: {
                handleSubmit: function(){
                    this.(this.inputValue);
                    this.inputValue = "";
                },
                handleDelete: function(index){
                    this.(index, 1)
                }

            }
        })
    </script>

 确定
item-global
sf
fsdfsdf
item-local
sf 0
fsdfsdf 1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81