Vue 的简单入门理解

vue

一.

angular适合很大的项目mvvm,react干什么都行的组件式,vue是个轻量级mwwm适合中小型应用。

感觉react全家桶未来应该会走红,中小项目里vue会是不错的选择,angular在版本稳定下来之前还是先观望吧。。

顺便说下上手难度,vue不难(只要不是一上来就webpack,cli),angular1.x也不难(2.x没用过,感觉改的有点多,等版本相对稳定再说),react曲线感觉难一点点。

火大概是raect>angular>vue的,但angular在降温,react在继续上升,vue也在上升期。

官网:      http://vuejs.org/  (可选中文版)

Api   :       https://cn.vuejs.org/v2/api/  

相关网址:https://www.awesomes.cn/repo/yyx990803/vue

文章       :http://www.wtoutiao.com/p/6e4lwMF.html

个人案例:http://web.jobbole.com/89976/

 官网vue资料总结:

    

     1.Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的 渐进式框架。

          与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计。

          Vue 的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整合。                           

          另一方面,Vue 完全有能力驱

          动采用单文件组件和 Vue 生态系统支持的库开发的复杂单页应用。

          Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。

vue 内部封装好的参数,函数:

相关网址: http://www.cnblogs.com/like-xcm/p/5956848.html

var vm = new Vue({

  el: "选择器",  挂载到页面的那个元素里,即确定vue的作用范围  外部可通过vm.$el访问,得到的是一个原生dom元素,可进行对应操作

  a: '',         //自定义属性  外部可通过vm.$options访问

  data: { },     //实例属性都在这里面,外部通过实例名,即vm.$data调用

  computed: { }, //计算属性,也是实例属性,只是以方法的形式存在,并可以有逻辑运算的属性

  method: { },   //实例方法都在这里

  watch: { },    //对data和computed的属性进行监听,当属性有变化时自动触发,以方法的形式存在 外部通过$.watch调用

  created: function(){ 实例已经创建 }

  beforeCompile: function(){ 模块编译之前 }

  compiled: function(){ 模块编译之后;即模板占位符被是内容替换}

  ready: function(){ 模板插入到文档中了;相当于window.onload }

  beforeDestroy: function(){ 对象销毁之前 }

  destroyed: function(){ 对象销毁之后 }

});

注意:

①以上属性和方法,实例内部都通过this调用,外部则通过对应的实例方法访问

②在vue的生命周期过程中,它自身还提供了一系列的钩子函数供我们使用,进行自定义逻辑的注入

③以上4个方法在对象被实例化后即按顺序执行,以下2个方法需通过事件触发,并通过调用实例名.$destory()才执行  

二.

代码: ①按照平常的html页面写(第一个例子引入jq,后面都不需要jq)

            ②同时引入 vue.js ,以及就专门的vue使用语法

(vue.js 地址:  https://unpkg.com/vue/dist/vue.js)

1.第一个例子: hello  vue

<body>

    <div id="app">

        {{ message }}

    </div>

    <script src="../js/jquery-1.8.2.min.js"></script>

    <script src="../js/vue.js"></script>

    <script>

        $(function(){

            var app = new Vue({

                el: '#app',

                data: {

                    message: 'Hello Vue!'

                }

            })

            app;

            console.log(app.$data);

        })

    </script>

</body>

           

     console.log(app.$data);  

    

    注意: ①在控制台更改message的值,页面中的值也会随着变化

                 ② 只在第一次打印hellovue时:app 需要再 执行一次,页面才能显示输出message的值,

     

                 ③输出 app message信息时,html页面内 {{message}}  要写在 el 所代表的 id 标签内部

三.

1.v-bind 指令: 控制台显示message信息已添加上新内容,但是没显示出来

 指令带有前缀 v-,以表示它们是 Vue.js 提供的特殊属性

     

<div id="app-2">

    <span v-bind:title="message"> 在原有内容基础上添加新内容 </span>

    <p> {{message}}}</p>   <!--js新增内容 Tue Feb 07 2017 15:31:58 GMT+0800 (中国标准时间)}-->

</div>


<script src="../js/jquery-1.8.2.min.js"></script>

<script src="../js/vue.js"></script>

<script>

    $(function(){

        var app2 = new Vue({

            el: '#app-2',

            data: {

                message: 'js新增内容 ' + new Date()

            }

        })

        app2;

        console.log(app2.message);

        console.log(app2.$data);

    })

</script>

注意:

①console.log(app2.$data)

②console.log(app2.message);

四.

1.v-if

app3: seen:true 显示p标签内容

app3 seen: false   隐藏p标签内容

<div id="app-3">

    <p v-if="seen">Now you see me</p>

</div>

<script src="../js/jquery-1.8.2.min.js"></script>

<script src="../js/vue.js"></script>

<script>

    $(function(){

        var app3 = new Vue({

            el: '#app-3',

            data: {

                seen: true

            }

        })

    })

</script>

注意: 这个例子演示了我们不仅可以绑定 DOM 文本到数据,

           也可以绑定 DOM 结构到数据

1.v-for

<div id="app-4">

    <ol>

        <li v-for="todo in todos">

            {{ todo.text }}

        </li>

    </ol>

</div>

<script src="../js/jquery-1.8.2.min.js"></script>

<script src="../js/vue.js"></script>

<script>

    $(function(){

        var app4 = new Vue({

            el: '#app-4',

            data: {

                todos: [

                    { text: 'Learn JavaScript' },

                    { text: 'Learn Vue' },

                    { text: 'Build something awesome' }

                ]

            }

        })

    })

</script>

输出: console.log(app4.todos.push({ text: 'New item' }))

发现: ul列表又添加了一行数据

          

五.

1.v-on : click=“函数(方法)名”

<div id="app-5">

    <p>{{ message }}</p>

    <button v-on:click="reverseMessage">Reverse Message</button>

</div>

<script src="../js/jquery-1.8.2.min.js"></script>

<script src="../js/vue.js"></script>

<script>

    $(function(){

        var app5 = new Vue({

            el: '#app-5',

            data: {

                message: 'Hello Vue.js'

            },

            methods: {

                reverseMessage: function () {

                    this.message = this.message.split(' ').reverse().join(' , ')

                }

            }

        })

    })

</script>

   触发事件前               触发事件后

    

2.v-on : click=“函数(方法)名”

<div id="app">

    <button v-on:click="counter += 1">增加 1</button>

    <button v-on:click="counter -= 1">减少 1</button>

    <p>这个按钮被点击了 {{ counter }} 次。</p>

</div>


<script src="../js/vue.js"></script>

<script>

    var app = new Vue({

        el: '#app',

        data: {

            counter: 0

        }

    })

</script>

2.v-on : click=“函数(方法)名”

<button v-on:click="greet">Greet</button>

var app = new Vue({

    el: '#app',

    data: {

        counter: 0,

        info: "hello world"

    },

    methods: {

        greet: function(event){

            alert(this.info)

        }

    }

})

注意:methods 有 s,不然会报错(greet not defined)

2.v-on :keyup.键名="函数名"

<input v-on:keyup.13="submit"/>

<input v-on:keyup.enter="submit"/>

methods: {

    greet: function(event){

        alert(this.info)

    },

    say: function(msg){

        alert(msg);

    },

    warn: function (message, event) {

        // 现在我们可以访问原生事件对象
        console.log(event)

        if (event) event.preventDefault()

        alert(message)

    },

    submit: function(){

        console.log("按键13触发")

    }

}

全部的按键别名:

  • .enter
  • .tab
  • .delete (捕获 “删除” 和 “退格” 键)

  • .esc
  • .space
  • .up
  • .down
  • .left
  • .right

可以通过全局 config.keyCodes 对象自定义按键修饰符别名:

六.

添加id,属性href,disabled等 - javascript语句判断 - 事件绑定 - 过滤器

1.v-model : 输入框的内容改变,p标签的内容也随之改变。

<div id="app-6">

    <p>{{ message }}</p>

    <input v-model="message">

</div>

<script src="../js/jquery-1.8.2.min.js"></script>

<script src="../js/vue.js"></script>

<script>

    $(function(){

        var app6 = new Vue({

            el: '#app-6',

            data: {

                message: 'Hello Vue!'

            }

        })

    })

</script>

2.v-once :  一次加载  后台数据改变页面显示内容也不再改变

<body>

    <div class="app">

        message: {{message}}

        <p v-once>This will never change: {{ msg }}</p>

    </div>

    <script src="../js/vue.js"></script>

    <script>

        var app = new Vue({

            el: ".app",

            data: {

                message: "hello vue",

                msg: "v-once 一次加载不再改变"

            }

        })

        console.log(app)

</script>

效果图如下:

  

3.v-html : 添加一个html标签片段

   v-html="data 数据变量名"

4.v-bind:id="data参数名" : 添加id值

    v-bind:disabled="data参数名" : 添加disabled属性

<body>

    <div class="app">

        message: {{message}}

        <p v-once>This will never change: {{ msg }}</p>

        <div v-html="rawHtml"></div>

        <div v-bind:id="dynamicId">v-bind:id  添加id值 </div>

        <button v-bind:disabled="someDynamicCondition1">Button: v-bind:disabled="false"</button>

        <button v-bind:disabled="someDynamicCondition2">Button: v-bind:disabled="true"</button>

    </div>

    <script src="../js/vue.js"></script>

    <script>

        var app = new Vue({

            el: ".app",

            data: {

                message: "hello vue",

                msg: "v-once 一次加载不再改变",

                rawHtml: "<span>添加html标签片段</span>",

                dynamicId: "d1",

                someDynamicCondition1: false,

                someDynamicCondition2: true

            }

        })

        console.log(app.$data)

</script>

效果图如下:

5.使用javascrpt 表达式

    表达式限制:每个绑定都只能包含单个表达式

<div class="app">

    <p>number初始值为1: {{number+1}}</p>

    <p>ok状态:{{ ok ? 'YES' : 'NO' }}</p>

    <p>message字符处理,初始值abcd:{{ message.split('').reverse().join('-') }}</p>

    <div v-bind:id="'list-' + id">v-bind:id="'list-' + id"</div>

</div>

<script src="../js/vue.js"></script>

<script>

    var app = new Vue({

        el: ".app",

        data: {

            number: 1,

            ok: true,

            message: "abcd",

            id: "d1",

            someDynamicCondition1: false,

            someDynamicCondition2: true

        }

    })

    console.log(app.$data)

</script>

效果图如下:

注意: javascript  可以直接使用 Data,Math

<div class="app">

    <p>number初始值为1: {{number+1}}</p>

    <p>ok状态:{{ ok ? 'YES' : 'NO' }}</p>

    <p>message字符处理,初始值abcd:{{ message.split('').reverse().join('-') }}</p>

    <div v-bind:id="'list-' + id">v-bind:id="'list-' + id"</div>

    <p>{{Math.PI}}</p>

    <p>{{new Date().getHours()+":"+new Date().getMinutes()+":"+new Date().getSeconds()}}</p>

    <p>{{time}}</p>

</div>

<script src="../js/vue.js"></script>

<script>

    var time = new Date().getHours()+":"+new Date().getMinutes()+":"+new Date().getSeconds();

    var app = new Vue({

        el: ".app",

        data: {

            number: 1,

            ok: true,

            message: "abcd",

            id: "d1",

            time: time,

            someDynamicCondition1: false,

            someDynamicCondition2: true

        }

    });

    console.log(app.$data,Math.PI, time)

</script>

6.v-bind:href="url"  链接

<a v-bind:href="url" v-bind:target="target">国融证券官网</a>

url: "http://www.grzq.com/osoa/views/index.html",

target: "_blank"

注意: v-bind:href="url"

           这里的url 不能直接写成跳转地址,不然会报错。

7.v-on:submit.prevent="函数名"

<form v-on:submit.prevent="onSubmit">

    <button type="submit">提交</button>

    <span>{{iptstate}}</span>

</form>

var app = new Vue({

    el: ".app",

    data: {

        number: 1,

        ok: true,

        message: "abcd",

        id: "d1",

        time: time,

        url: "http://www.grzq.com/osoa/views/index.html",

        target: "_blank",

        iptstate: "",

        onSubmit: function(e){

            console.log("onSubmit表单提交");

            this.iptstate = "onSubmit表单提交";

        }

    }

});

效果图如下:点击提交按钮触发函数

       

8.filter 过滤器

   capitalize  已经被移除,需要的话得自己封装方法

七.自定义组件(标签): todo-item

<body>

    <div id="app-7">

        <ol>

            <!-- Now we provide each todo-item with the todo object    -->
            <!-- it's representing, so that its content can be dynamic -->
            <todo-item v-for="item in groceryList" v-bind:todo="item"></todo-item>

        </ol>

    </div>

    <script src="../js/vue.js"></script>

    <script>

            Vue.component('todo-item', {

                props: ['todo'],

                template: '<li>{{ todo.text }}</li>'

            })

            var app7 = new Vue({

                el: '#app-7',

                data: {

                    groceryList: [

                        { text: 'Vegetables' },

                        { text: 'Cheese' },

                        { text: 'Whatever else humans are supposed to eat' }

                    ]

                }

            })

    </script>

</body>


八.

<script>

    var data = { a: 1 }

    var vm = new Vue({

        data: data
    })

    vm.a === data.a // -> true
    // 设置 属性 也会影响到 原始数据
    vm.a = 2

    data.a

    console.log(vm.a,data.a) // 2 2
    // 设置 原始数据 也会影响到 属性
    data.a = 3

    vm.a

    console.log(vm.a,data.a) // 3 3

</script>

注意:只有这些被代理的属性是响应的。

          如果在实例创建之后添加新的属性到实例上,它不会触发视图更新。

  1. created 这个钩子在实例被创建之后被调用    

var vm = new Vue({

    data: {

        aa: 1

    },

    created: function () {

        // `this` 指向 vm 实例
        console.log('aa is: ' + this.aa);   // aa is: 1

    }

})


九.

1.判断添加 class: active

    isActive :     true   添加active

                        false   不添加active

<body>

    <div class="test">

        <div v-bind:class="{ active: isActive1 }">div1</div>

        <div v-bind:class="{ active: isActive2 }">div2</div>

    </div>

    <script type="text/javascript">

        var myVue = new Vue({

            el: ".test",

            data: {

                isActive1: true,

                isActive2: false,

                rawId: "ID1",

                formatId: "id2"

            }

        })

    </script>

</body>

2.添加多个class  (只要为true,就会添加)

3.class 绑定在一个对象里  

var myVue = new Vue({

    el: ".test",

    data: {

        isActive1: true,

        isActive2: false,

        hasError: true,

        rawId: "ID1",

        formatId: "id2",

        classObject: {

            active: true,

            'text-danger': true

        }

    }

})

4.class 包含在数组里

var myVue = new Vue({

        el: ".test",

        data: {

            isActive1: true,

            isActive2: false,

            hasError: true,

            rawId: "ID1",

            formatId: "id2",

            classObject: {

                active: true,

                'text-danger': true

            },

            activeClass: 'active',

            errorClass: 'text-danger'

        }

    })

</script>

5.class 三元表示

var myVue = new Vue({

    el: ".test",

    data: {

        activeClass: 'active',

        errorClass: 'text-danger'

    }

})

6.添加绑定 style 样式

<div class="test">

    <div v-bind:style="styleObject">添加style样式对象</div>

</div>

<script type="text/javascript">

    var myVue = new Vue({

        el: ".test",

        data: {

            styleObject: {

                color: "#fff",

                backgroundColor: "blue"

            }

        }

    })

</script>

7.多个style样式

<div v-bind:style="[baseStyles, otherStyles]">基本样式 + 其他样式</div>

var myVue = new Vue({

    el: ".test",

    data: {

        styleObject: {

            color: "#fff",

            backgroundColor: "blue"

        },

        baseStyles: {

            color: "#fff",

            backgroundColor: "blue"

        },

        otherStyles: {

            border: "2px solid red",

            margin: "10px"

        }

    }

})

8.css3 过渡效果

<!DOCTYPE HTML>

<html>

<head>

    <title>vue简单例子</title>

    <meta charset="UTF-8"/>

    <style>

        .fade-enter-active, .fade-leave-active {

            transition: opacity .5s
        }

        .fade-enter, .fade-leave-active {

            opacity: 0

        }

    </style>

</head>

<body>

<div id="app">

    <button v-on:click="show = !show">

        Toggle

    </button>

    <transition name="fade">

        <p v-if="show">hello</p>

    </transition>

</div>

<script src="../js/vue.js"></script>

<script>

    new Vue({

        el: '#app',

        data: {

            show: true

        }

    })

</script>

</body>

</html>

十.

1.简单的条件渲染

<div class="test">

    <h1 v-if="ok">Yes</h1>

    <h1 v-if="no">no</h1>

    <h1 v-else>其他</h1>

</div>

<script type="text/javascript">

    var myVue = new Vue({

        el: ".test",

        data: {

            ok: true,

            no: false

        }

    })

</script>

2.条件组

   v-if   v-else-if   v-else   

  

2.js数组过滤

<li v-for="n in evenNumbers">{{ }}</li>

data: {

    items: [

        {message: 'Foo' },

        {message: 'Bar' }

    ],

    msg: [

        {message: 'Foo' },

        {message: 'Bar' }

    ],

    arr: [1,2,3,46,6],

    object: {

        FirstName: 'John',

        LastName: 'Doe',

        Age: 30

    },

    numbers: [ 1, 2, 3, 4, 5, 6 ]

},

computed: {

    evenNumbers: function () {

        return this.numbers.filter(function (number) {

            return number % 2 === 0

        })

    }

}

十一.

1.复选框: 根据选择 实时显示选中内容,

    选中就在数组中添加内容,取消选中就在数组中删除数据

<div id="app">

    <input type="checkbox" id="jack" value="Jack" v-model="checkedNames">

    <label for="jack">Jack</label>

    <input type="checkbox" id="john" value="John" v-model="checkedNames">

    <label for="john">John</label>

    <input type="checkbox" id="mike" value="Mike" v-model="checkedNames">

    <label for="mike">Mike</label>

    <br>

    <span>Checked names: {{ checkedNames }}</span>

</div>


<script src="../js/vue.js"></script>

<script>

    var app = new Vue({

        el: '#app',

        data: {

            checkedNames: []

        }

    })

</script>

注意: 单选框,下拉框 同样如此。

单选框:

<input type="radio" id="one" value="One" v-model="picked">

<label for="one">One</label>

<br>

<input type="radio" id="two" value="Two" v-model="picked">

<label for="two">Two</label>

<br>

<span>Picked: {{ picked }}</span>

  

下拉框:

<select v-model="selected">

    <option>A</option>

    <option>B</option>

    <option>C</option>

</select>

<span>Selected: {{ selected }}</span>

默认选中的下拉框:

<select v-model="selected2">

    <option v-for="option in options" v-bind:value="option.value">

        {{ option.text }}

    </option>

</select>

<span>Selected: {{ selected2 }}</span>

data: {

    checkedNames: [],

    picked: [],

    selected: [],

    selected2: 'A',

    options: [

        { text: 'One', value: 'A' },

        { text: 'Two', value: 'B' },

        { text: 'Three', value: 'C' }

    ]

}

以上是 Vue 的简单入门理解 的全部内容, 来源链接: utcz.com/z/377119.html

回到顶部