Vue.js 创建一个 CNODE 社区(1)

使用 Vue.js 创建一个 CNODE 社区 (1) - 入门

终于学到了 Vue,选的毕设是用 Vue 创建一个类似 CNODE 的社区。

Vue 作为一个主要运用了 MVVM 架构的框架,很值得我们去学习,就先从 Vue 的官方网站教程中过一遍 demo,尽快熟悉关于 Vue 的各种基础概念。


简述MVVM

MVVM 和 MVC 一样,也是一种代码组织形式。

他把代码分为三个部分,分别是:

Model 表示对数据的操作

View 表示视图

ViewModel 把 Model 的变化更新到 View 上,把 View 的修改同步到 Model

参考答案

MVVM是Model-View-ViewModel的缩写。MVVM是一种设计思想。Model 层代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑;View 代表UI 组件,它负责将数据模型转化成UI 展现出来,ViewModel 是一个同步View 和 Model的对象。

在MVVM架构下,View 和 Model 之间并没有直接的联系,而是通过ViewModel进行交互,Model 和 ViewModel 之间的交互是双向的, 因此View 数据的变化会同步到Model中,而Model 数据的变化也会立即反应到View 上。

ViewModel 通过双向数据绑定把 View 层和 Model 层连接了起来,而View 和 Model 之间的同步工作完全是自动的,无需人为干涉,因此开发者只需关注业务逻辑,不需要手动操作DOM, 不需要关注数据状态的同步问题,复杂的数据状态维护完全由 MVVM 来统一管理。

ViewModel 把 Model 的变化更新到 View 上,把 View 的修改同步到 Model


Vue.js的优点

1.学习曲线平缓

2.易上手

3.功能强大

4.使用范围广


创建 Vue 实例

一个 Vue 应用都是通过用 Vue 函数创建一个新的 Vue 实例开始的。通过构造函数 Vue 就可以创建一个 Vue 的根实例,并启动 Vue 应用---入口
必不可少的一个选项就是 el 。 el 用于指定一个页面中己存在的 DOM 元素来挂载 Vue实例,可以是标签。也可以是css语法
通过 Vue 实例的 data 选项,可以声明应用内需要双向绑定的数据。建议所有会用到的数据都预先在 data 内 声明,这样不至于将数据散落在业务逻辑中,难以维护。也可以指向一个已经有的变量

<div id="app">
    {{ msg }}
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    var app = new Vue({
        el:'#app',
        data:{}
    })
</script>

Vue 文本插值

Vue .js 只支持单个表达式,不支持语句和流控制。如三元运算符也是支持的。

<div id="app">
    {{ msg }}
    {{ a }}
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    var app = new Vue({
        el:'#app',
        data:{
            msg:'vue.js',
            a:2
        },
    })
    // 访问 Vue 实例的属性
    console.log(app.$data)
    console.log(app.$el)

    // 访问data元素的属性-- 直接app.属性名,app.msg
    console.log(app.a)
</script>

Vue 初探生命周期

每个 Vue 实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听、编译模板、将实例挂载到 DOM 并在数据变化时更新 DOM 等。同时在这个过程中也会运行一些叫做生命周期钩子的函数,这给了用户在不同阶段添加自己的代码的机会。

<div id="app">
    {{ msg }}
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    var app = new Vue({
        el:'#app',
        data:{
            msg:'vue.js',
            a:2
        },
        created:function(){
            alert('Vue 实例创建完成,还未挂载到 DOM')
        },
        mounted:function(){
            alert('Vue 实例已经挂载到 DOM')
        }
    })
</script>

Vue 过滤器

Vue. 支持在{{}}插值的尾部添加一小管道符 “ | ” 对数据进行过滤,经常用于格式化文本,比如字母全部大写、货币千位使用逗号分隔等。过滤的规则是自定义的, 通过给 Vue 实例添加选项 filters 来设置

div id="app">
    {{ msg }} <br>
    {{ a }} <br>
    {{ date }} <br>
    {{ date | formatDate}}
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    var plusDate = function(value){
        return value<10?'0'+value:value
    }
    var app = new Vue({
        el:'#app',
        data:{
            msg:'vue.js',
            a:2,
            date:""
        },
        filters:{
            formatDate:function(value){
                var value = new Date(value)
                var years = value.getFullYear()
                var month = plusDate(value.getMonth() + 1)
                var day = plusDate(value.getDate())
                var hour = plusDate(value.getHours())
                var min = plusDate(value.getMinutes())
                var sec =plusDate(value.getSeconds())
                return years+'-'+month+'-'+day+'/'+hour+":"+min+':'+sec
            },
        },
        created:function(){
            // alert('Vue 实例创建完成,还未挂载到 DOM')
        },
        mounted:function(){
            var _this = this
            var timer = setInterval(function(){
                _this.date = new Date()
            },1000)
        }
    })
</script>

Vue 常用指令

指令( Directives )是 Vue 模板中最常用的一项功能,它带有前缀 v-,能帮我们快速完成DOM操作。循环渲染。显示和隐藏。

v-text 解析文本,和 {{}} 作用一样

v-html 解析 HTML

v-on 绑定事件监听器

v-bind 动态更新 HTML 元素上的属性

<div id="app">
    <hr>
    文本插值:
    {{ msg }} <br>
    {{ a }} <br>
    <hr>
    filter 过滤器: <br>
    {{ date }} <br>
    {{ date | formatDate}} <br>
    <hr>
    常用指令:<br>
    v-text: <br>
    <span v-text='apple'></span> <br>
    v-html: <br>
    <div v-html='banana'></div> <br>
    v-bind: <br>
    <span v-bind:class="className">here</span> <br>
    v-on: <br>
    <button v-on:click="cout">{{ num }}</button>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    var plusDate = function(value){
        return value<10?'0'+value:value
    }
    var app = new Vue({
        el:'#app',
        data:{
            msg:'vue.js',
            a:2,
            date:"",
            apple:'apple',
            banana:'<span style="color:yellow">香蕉</span>',
            className:'transRed',
            num:0
        },
        filters:{
            formatDate:function(value){
                var value = new Date(value)
                var years = value.getFullYear()
                var month = plusDate(value.getMonth() + 1)
                var day = plusDate(value.getDate())
                var hour = plusDate(value.getHours())
                var min = plusDate(value.getMinutes())
                var sec =plusDate(value.getSeconds())
                return years+'-'+month+'-'+day+'/'+hour+":"+min+':'+sec
            },
        },
        methods:{
            cout:function(){
                this.num = this.num + 1
            }
        },
        created:function(){
            // alert('Vue 实例创建完成,还未挂载到 DOM')
        },
        mounted:function(){
            var _this = this
            var timer = setInterval(function(){
                _this.date = new Date()
            },1000)
        }
    })
</script>

猜你喜欢

转载自www.cnblogs.com/No-harm/p/9696597.html