按照顺序学习:

https://scotch.io/courses/build-an-online-shop-with-vue/hello-world

Vue Authentication And Route Handling Using Vue-router

Handling Authentication In Vue Using Vuex


Vue使用的就是mvvm框架

它和MVC, MVP的区别是什么?

mvc是最常用的软件架构,mvvm,mvp是它的衍生。

http://www.ruanyifeng.com/blog/2015/02/mvcmvp_mvvm.html

1. Mvc

  1. View 传送指令到 Controller
  2. Controller 完成业务逻辑后,要求 Model 改变状态
  3. Model 将新的数据发送到 View,用户得到反馈

2. MVP

  • 1. 各部分之间的通信,都是双向的。
  • 2. View 与 Model 不发生联系,都通过 Presenter 传递。
  • 3. View 非常薄,不部署任何业务逻辑,称为"被动视图"(Passive View),即没有任何主动性,而 Presenter非常厚,所有逻辑都部署在那里。

3. MVVM

MVVM 模式将 Presenter 改名为 ViewModel,基本上与 MVP 模式完全一致。

唯一的区别是,它采用双向绑定(data-binding):View的变动,自动反映在 ViewModel,反之亦然。Angular 和 Ember 都采用这种模式。


webpack:

把依赖的modules,通过webpacke,转化为static assets。

简单来说就是一个module bundler模块打包工具。

它将一堆文件中的每个文件都作为一个module, 找出它们之间的dependancies , 将它们打包为可部署的静态资源。

可参考:https://vue-loader-v14.vuejs.org/zh-cn/

优点:大大优化前端工作流程。

缺点:配置麻烦。

Vue Loader

https://vue-loader-v14.vuejs.org/zh-cn/

Vue Loader是webpack的一个loader。它允许你以一种名为单文件组件的格式.vue写Vue组件,Vue Loader会把这个组件转化为JavaScript模块.

  • 支持ES2015
  • 允许Vue组件的组成部分使用其他的webpack loader,比如<style>使用Sass, 对<template>使用Pug;
  • 允许在一个 .vue 文件中使用自定义块,并对其运用自定义的 loader 链;???
  • 为每个组件模拟出css 作用域。
  • 在开发过程中使用热重载来保持状态。

Vue组件细节

.vue是自定义的文件类型,用类HTML语法描述一个Vue组件。它包括3种类型的顶级语言块<template>, <script>, <style>,还可以自定义块。

vue-loader 会解析文件,提取每个语言块,如有必要会通过其它 loader 处理,最后将他们组装成一个 CommonJS 模块,module.exports 出一个 Vue.js 组件对象。

vue-loader 支持使用非默认语言,比如 CSS 预处理器,预编译的 HTML 模版语言,通过设置语言块的 lang 属性。(具体见预处理器章节)

  1. <style lang="sass">
  2. /* write Sass! */
  3. </style>

语言块

<template>

  • 默认语言: html
  • 内容被提取为string, 将编译并用作Vue组件的template选项。

<script>

  • 默认语言: js(在检测到babel-loader会自动支持ES2015)
  • 该脚本在类CommonJS环境中执行(就像通过webpack打包的正常js模块),因此可以require()其他依赖。如果支持ES2015, 还可以使用import和export语法。
  • 脚本必须导出Vue.js组件对象。使用export default {...}

<style>

  • 默认语言:css
  • 一个单文件组件可以有多个<style>标签。

自定义块:

创建项目:

  1. //也可以用yarn
  2. npm install -g @vue/cli
  3. vue create hello-vue
  4. cd hello-vue
  5. npm run serve # 也可以用yarn serve
  6.  
  7. //安装好@vue/cli后,可以使用图形界面创建和管理
  8. vue ui

❌:不知道怎么引起的,之前一直好好的!

✅ 更新node到最新版本(使用nvm下载最新版本,并使用nvm use <版本号>)

参考:https://github.com/vuejs/vue-cli/issues/889

cd ~/.vuerc

然后:useTaobaoRegistry: false.  还是不可以。(❌不是这里的问题)

node -v  //返回版本是8.9, 昨天我更新到11.00了,估计是非全局的更新。

首先,我更新了npm:

  1. npm install -g npm

然后升级node.js

npm中有一个模块叫做“n”,专门用来管理node.js版本的。先安装它,然后使用它来更新node.

更新到最新的稳定版:

  1. npm install -g n
  2. sudo n stable

操,不管用啊!!!

还是参考博客:https://www.cnblogs.com/chentianwei/p/10090483.html

下载nvm, 然后nvm use <版本号 | stable > ✅


组件

组件描述了模版和逻辑之间的数据流动。数据从逻辑到模版, event emitted从template到logic:

  • Vue Instance ----DATA----> Template
  • Template ----EVENT-----> Vue Instance

Local vs Global组件

本地组件就是普通的js对象

  1. const GreetingComponent = {
  2. template: `<h1>Hi, you</h1>`,
  3. }
  4.  
  5. new Vue({
  6. el: '#app',
  7. template: `
  8. <div><GreetingComponent/></div>
  9. ` ,
  10. components: { GreetingComponent}
  11. })
  12.  
  13. //使用components选项来插入组件。

Global组件是使用Vue的component方法生成的。Vue.component( id, [definition] )

实际上

  1. Vue.component("my-component", { ... })
  2. //是简写。完全的代码:
  3. Vue.component('my-component', Vue.extend({ /* ... */ }))

Vue.extend(options)是基础Vue构造器,创建一个子类。参数是组件选项的对象。


比较jQuery, vnalia JS, 和Vue的DOM操作

  1. // jQuery
  2. const divElement = $('#text');
  3. divElement.text('Hello Vue')
  1. // JavaScript
  2. const divElement = document.getElementById('text');
  3. const textNode = document.createTextNode('Hello Vue');
  4.  
  5. divElement.appendChild(textNode);
  1. new Vue({
  2. template: `<div>{{text}}</div>`,
  3. data () {
  4. return {
  5. text: 'Hello Vue'
  6. };
  7. }
  8. }).$mount('#app')

template代表view, data代表model, 通过对象特性,它两被绑定在一起。

这就是MvvM设计风格!

模版template的几个概念:

  • Interpolation: {{ }}, 也称为mustache tag。它把内部的数据渲染到view上。当数据变化,模版也会自动更新。这是mvvm的设计风格!
  • Directives: 指令,客制化的HTML属性,可以用于绑定data到view和attributes。也可以绑定events.
    • v-bind指令是响应方式的,简写:xxx,
    • v-on 用于绑定events, 简写@xxx
  • 修改默认行为v-on:click.prevent="doThis"
  • {{ }}内部可以执行计算,它是template expression.

Conditional

v-show, v-if, v-else-if, v-else,

vanilla JavaScrip:

  1. <button id="btn">Clicke me</button>
  2. <p id="text">Lorem ipsum dolor sit amet,...</p>
  3.  
  4. <script>
  5. let isShown = false;
  6.  
  7. const btn = document.getElementById('btn');
  8. const text = document.getElementById('text');
  9.  
  10. updateText(isShown)
  11.  
  12. btn.addEventListener('click', () => {
  13. isShown = !isShown
  14. console.log(isShown)
  15. updateText(isShown)
  16. })
  17.  
  18. function updateText(isShown) {
  19. text.style.display = isShown ? 'block' :'none';
  20. }
  21. </script>

改成vue.js

  1. <template>
  2. <div>
  3. <button v-on:click="toggle">Clicke me</button>
  4. <p id="text" v-show="isShown">Lorem ipsum dolor sit amet,...</p>
  5. </div>
  6. </template>
  7.  
  8. <script>
  9. export default {
  10. name: 'button',
  11. data: function() {
  12. return {
  13. isShown: false,
  14. }
  15. },

  16.  // 这里使用了v-show代替了v-bind:style="updateText"
  17. // computed: {
  18. // updateText() {
  19. // return {
  20. // display: this.isShown ? "block" : 'none'
  21. // }
  22. // }
  23. // },
  24.  
  25. methods: {
  26. toggle() {
  27. this.isShown = !this.isShown
  28. },
  29. }
  30. }
  31. </script>

vue.js和vanilla JavaScript的原理是不同的。

  • vanilla JavaScript是在元素上绑定事件,当事件被触发后,执行相应的函数,改变<p>的css样式。
  • vue.js是使用响应式编程。Vue监听data选项中的所有属性,在属性被访问和修改时通知变化,激活re-render, 然后组件从新渲染函数最后改变虚拟DOM Tree。

动态 Style and Classes(Class和Style绑定)

  1. <div v-bind:class="{ active: isActive }"></div>

首先active是一个类,

然后isActive可以是一个data, 类型是boolean。如果active: true, 则active这个类在<div>上生效。

可以给:class传入多个对象,同时:class指令可以和普通的class属性共存。

和class绑定的对象无需内联在模版里,可以绑定一个返回对象的计算属性,类似上例

MVC,MVVM,MVP的区别/ Vue中忽略的知识点!的更多相关文章

  1. 理解MVVM在react、vue中的使用

    理解MVVM在react.vue中的使用 一:什么是MVC.为什么不用MVC 1:MVC的含义: M(modal):是应用程序中处理数据逻辑的部分. V (view)  :是应用程序中数据显示的部分. ...

  2. UWP开发之Mvvmlight实践二:Mvvmlight的核心框架MVVM与MVC、MVP的区别(图文详解)

    最近UWP开发在海外很潮流,随着微软收购Xamarin,我们这些C#程序员也可以靠这杆小米枪挑战Android,IOS平台了. 那我们为什么选择MVVM做UWP开发?MVC,MVP,MVVM他们之间到 ...

  3. MVVM,MVC,MVP的区别

    MVC.MVP 和 MVVM 是三种常见的软件架构设计模式,主要通过分离关注点的方式来组织代码结构,优化开发效率. 在开发单页面应用时,往往一个路由页面对应了一个脚本文件,所有的页面逻辑都在一个脚本文 ...

  4. MVC和MVP的区别

    MVC: Model - View - Controller MVP: Model - View - Presenter MVC和MVP到底有什么区别呢? 从上图可以看到在MVC里,View是可以直接 ...

  5. Vue中 props 这些知识点

    如果你一直在阅读有关"props"内容,你会发现我们可能也一直在使用它们(即使没有意识到),但也许你并不完全确定它们是什么.或者如何正确使用它们,并充分利用它们. 当你读完这篇指南 ...

  6. vue中的一些知识点--多看文档

    重温vue,一些知识点简单记录. 1.我们都知道当数据变化时,视图会重新渲染.注意:只有当vue实例被创建时,data中存在的属性才是响应式的.后续新添加的属性不会触发视图变化. 使用 Object. ...

  7. vue 中的小知识点

    1)使用is解决小bug <!DOCTYPE html><html lang="en"> <head> <meta charset=&qu ...

  8. mvc、mvp和mvvm

    一.MVC 设计图: 可能由于MVP.MVVM的兴起,MVC在android中的应用变得越来越少了,但MVC是基础,理解好MVC才能更好的理解MVP,MVVM.因为后两种都是基于MVC发展而来的. 1 ...

  9. MVC、MVP、MVVM、Angular.js、Knockout.js、Backbone.js、React.js、Ember.js、Avalon.js、Vue.js 概念摘录

    注:文章内容都是摘录性文字,自己阅读的一些笔记,方便日后查看. MVC MVC(Model-View-Controller),M 是指业务模型,V 是指用户界面,C 则是控制器,使用 MVC 的目的是 ...

随机推荐

  1. QML常用控件

    这里的控件是显示的元素 1.Item:一切的基类 Item { Image { source: "tile.png" } Image { x: width: height: sou ...

  2. 使用Selenium+Java+Juint实现移动web端自动化的代码实现

    浏览器: Chrome 首先通过developer模式查看Chrome浏览器支持哪些手机,如图: 在代码中使用ChromeOptions对象的addArguments方法来设置参数,如下代码所示: p ...

  3. SQL 基础语法笔记教程整理

    最近从图书馆借了本介绍 SQL 的书,打算复习一下基本语法,记录一下笔记,整理一下思路,以备日后复习之用. PS:本文适用 SQL Server2008 语法. 首先,附一个发现的 MySQL 读书笔 ...

  4. 4514: [Sdoi2016]数字配对 费用流

    链接 https://www.lydsy.com/JudgeOnline/problem.php?id=4514 思路 EK直接贪心做 <0的时候加上剩余返回 二分图a->b的时候 把b- ...

  5. linux网络流量实时监控工具之nload

    Install nload on a CentOS/RHEL/Red Hat/Fedora Linux First, turn on EPEL repo on a CentOS or RHEL bas ...

  6. 操作 frames 框架下的 dom 内容。

    2016-12-30 框架名: var obj=$(window.frames["wangpan"].document).find("a[menu=download_on ...

  7. 02:httpd-2.2基础配置

    ---恢复内容开始--- 9.日志设定 错误日志: ErrorLog logs/error_log //这里使用了相对路径,相对于/etc/httpd/路径 LogLevel warn  //定义日志 ...

  8. [UVA-11100] The Trip

    题目大意 大箱子能装小箱子,求在满足最少箱子的情况下,最小化每个箱子中最大的箱子个数. 解析 想到二分枚举箱子数,然后贪心的选择放进箱子的位置. 最优策略一定是将最大的 \(m\) 个先找出来,然后把 ...

  9. django 应用中获取访问者ip地址

    通常访问者的IP就在其中,所以我们可以用下列方法获取用户的真实IP: #X-Forwarded-For:简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP,只有在通过了HTTP 代理或者负载 ...

  10. centos7 Python3终端中敲击方向键显示「^[[C^[[D」

    [root@localhost src]# python3 Python ( , ::) [GCC (Red Hat -)] on linux Type "help", " ...