孙肖宁 发布的文章

简介

vue在小编看来就是一个很流行,很火的前端框架之一。那么官方怎么说的呢,我们一起看看:Vue 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。
说了这么多,小编还是不懂。不过接下来小编整理了一些经常用的东东。希望有所帮助。

使用

  1. 引入:首先引入你的vue.js.当我们导入包之后,在浏览器的内存中,就多了一个 Vue 构造函数。
  2. 使用:当 new 出来的这个 vm 对象,就是我们 MVVM中的 VM调度者。Vue 实例所控制的这个元素区域,就是MVVM的 V。
    示例:

    <div id="app">
     <p>{{ msg }}</p>
    </div>
    
    <script>
     var vm = new Vue({
         el:'#app',// 表示当前我们 new 的这个 Vue 实例,要控制页面上的哪个区域
         data:{// data 属性中,存放的是 el 中要用到的数据
             msg:'Hello World'
         }
     })
    </script>

    常用指令

  3. {{}}插值表达式。
  4. v-cloak解决未编译时期,显示未编译的代码,能够解决插值表达式闪烁的问题。这个指令保持在元素上直到关联实例结束编译。和 CSS 规则如 [v-cloak] { display: none } 一起用时,这个指令可以隐藏未编译的 Mustache 标签直到实例准备完毕。
  5. v-text它会覆盖元素中原本的内容,但是插值表达式只会替换自己的这个占位符,不会把整个元素的内容清空。而且v-text没有闪烁问题。
  6. v-htmlv-text类似,但是v-html可以把html解析,然而v-text会把所有的值以字符串的形式输出,包括html。
  7. v-bind:简写为: 是 Vue中,提供的用于绑定属性的指令。可以写合法的JS表达式.
  8. v-on: 简写为:@事件绑定机制。为元素指定处理函数的时候,如果加了小括号,就可以给函数传参了
  9. v-model 指令,可以实现表单元素和 Model 中数据的双向数据绑定.v-model 只能运用在表单元素中。而v-bind 只能实现数据的单向绑定,从 M 自动绑定到 V, 无法实现数据的双向绑定。

事件修饰符

  • .stop 阻止冒泡。
  • .prevent 阻止默认行为。
  • .capture 实现捕获触发事件的机制。添加事件侦听器时使用事件捕获模式。
  • .self 只当事件在该元素本身(比如不是子元素)触发时触发回调。.self 只会阻止自己身上冒泡行为的触发,并不会真正阻止 冒泡的行为。
  • .once 只触发一次事件处理函数。

在Vue中使用样式

使用class样式

这些样式都需要使用v-bind做数据绑定.

  • 数组

     <h1 :class="['top','res']">我是h1</h1>
  • 三元表达式

    <h1 :class="['top','res', isactive?'active':'']">我是h1</h1>
  • 对象

    • 数组中的对象

      <h1 :class="['top','res', {'active': isactive}]">我是h1</h1>
    • 对象
    <h1 :class="{red:true, italic:true, active:true, thin:true}">我是h1</h1>

    注意:在为 class 使用 v-bind 绑定 对象的时候,对象的属性是类名,由于 对象的属性可带引号,也可不带引号; 属性的值是一个标识符。

使用内联样式

  1. 直接在元素上通过 :style 的形式,书写样式对象

     <h1 :style="{color: 'red', 'font-size': '40px'}">我是h1</h1>
  2. 将样式对象,定义到 data 中,并直接引用到 :style

       <h1 :style="[ styleObj1, styleObj2 ]">我是h1</h1>
       <h1 :style="styleObj1">这是一个h1</h1>

    在data上定义样式:

     data: {
             h1StyleObj: { color: 'red', 'font-size': '40px' },
             styleObj2: { 'font-style': 'italic' }
     }

    v-for、v-if、v-show

v-for

  • 迭代数组

    <li v-for="(item, i) in list">索引:{{i}} --- 姓名:{{item.name}} --- 年龄:{{item.age}}</li>
  • 迭代对象中的属性

    <div v-for="(val, key, i) in userInfo">{{val}} --- {{key}} --- {{i}}</div>
  • 迭代数字

    <p v-for="i in 10">这是第 {{i}} 个P标签</p>

    注意:2.2.0+ 的版本里,当在组件中使用 v-for 时,key 现在是必须的而且只接受 string / number数据类型。当 Vue.js 用 v-for 正在更新已渲染过的元素列表时,它默认用 “就地复用” 策略。如果数据项的顺序被改变,Vue将不是移动 DOM 元素来匹配数据项的顺序, 而是简单复用此处每个元素,并且确保它在特定索引下显示已被渲染过的每个元素。为了给 Vue 一个提示,以便它能跟踪每个节点的身份,从而重用和重新排序现有元素,你需要为每项提供一个唯一 key 属性。

     <p v-for="item in list" :key="item.id">
      <input type="checkbox">{{item.id}} --- {{item.name}}
     </p>

    v-if、v-show

  • v-if 的特点:每次都会重新删除或创建元素,有较高的切换性能消耗.
  • v-show 的特点: 每次不会重新进行DOM的删除和创建操作,只是切换了元素的 display:none 样式,有较高的初始渲染消耗.
  • 如果元素涉及到频繁的切换,最好不要使用 v-if, 而是推荐使用 v-show,如果元素可能永远也不会被显示出来被用户看到,则推荐使用 v-if 。

get

Express中有专门接受get请求参数的方法,该方法还可以直接将接受到的数据转换为json对象
实例代码

app.get('',function(req,res){
    var data = req.query)
})

post

在处理post请求的时候如果想拿到post请求过来的数据,必须借助一个中间件body-parser

第一步:安装

npm install body-parser

第二步:引入

var bodyParser = require('body-parser');

第三步:获取解析器

var urlencodedParser = bodyParser.urlencoded({ extended: false })

第一步:安装

npm install --save art-template
npm install --save express-art-template

第二步:指定.html使用的解析引擎(官方给出的是art,自己开心就好)

app.engine('html', require('express-art-template'))

第三步:使用模板进行传值

app.get('/', function (req, res) {
    res.render('index.art', {
        user: {
            name: 'aui',
            tags: ['art', 'template', 'nodejs']
        }
    });
});

附录:官方示例

var express = require('express');
var app = express();
app.engine('art', require('express-art-template'));
app.set('view options', {
    debug: process.env.NODE_ENV !== 'production'
});

app.get('/', function (req, res) {
    res.render('index.art', {
        user: {
            name: 'aui',
            tags: ['art', 'template', 'nodejs']
        }
    });
});

小编在使用node的时候,在执行了npm init之后出现找不到C:\Program Files\nodejs\node_modules\npm\bin\node_modules\npm\bin\npm-cli.js这个文件的错误,然后执行npm -v无解,还是出现同样的错误,对于刚刚接触node的小编来说真不知道怎么办了,简单粗暴点吧,卸载,重装。。。。。。结果依旧是悲剧的,打开之后还是不行,还是同样的错误。小编看了下的确没有这个文件,上网找了找解决方案,由于小编技术不好,没有找到。小编心想使用了这么多天都没出现问题,突然就不能使用了呢,会不会是系统原因,要不重启下吧,重启之后,小编发现还真可以使用了。虽然不知道为什么,但是问题解决了,希望知道原因的小伙伴告诉小编一下吧。

解决办法:重装重启电脑
很遗憾的告诉大家,小编重装系统了,又遇到了相同的问题,没有解决,解决的小伙伴,麻烦告诉下小编。
1.png

scandir函数

  1. scandir() 函数返回指定目录中的文件和目录的数组。
  2. 语法:scandir(directory,sorting_order,context);
  3. |参数 |描述|
    |--|--|
    | directory | 必需。规定要扫描的目录。 |
    | sorting_order |可选。规定排列顺序。默认是 0,表示按字母升序排列。如果设置为 SCANDIR_SORT_DESCENDING 或者 1,则表示按字母降序排列。如果设置为 SCANDIR_SORT_NONE,则返回未排列的结果。 |
    | context |可选。规定目录句柄的环境。context 是可修改目录流的行为的一套选项。 |

LNMP开启scandir函数

scandir函数在linux中风险较大,所以我们一般在linux操作系统中直接禁止次函数。但是小编在安装最新版的handsome主题的时候,发现图片不能够随机显示,最后问了问开发者,发现自己的scandir函数没有开启,小编采用的是LAMP的环境,所以开启也很简单。
在linux控制台执行以下命令即可:

sed -i 's/,scandir//g' /usr/local/php/etc/php.ini

然后重启lnmp

lnmp restart

2.png

常用命令

npm是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,只要你安装了node就已经安装了npm,你可以通过npm --version来查看自己是否安装了npm,如果显示版本号,则证明已经安装了。如果想升级npm可以直接通过npm自己来升级npm install --global npm
常用命令:

  • npm init [-y] 生成package.json 包描述文件。其中的dependencies 选项的作用,可以帮我们保存第三方包的名字。如果删除了node_modules也不用担心,我们只需要执行npm install就可以把package.jsondependencies中所有的依赖全部下载下来。
  • npm install (npm i)一次性把dependencies中的全部的依赖项全部下载下来。
  • npm install (npm i 包名)把需要的包下载下来。
  • npm uninstall 包名(npm un [包名]) 删除下载的包。
  • npm update 包名 更新。
  • npm ls 列出当前安装的了所有包。
  • npm help 帮助,如果要单独查看某个命令的帮助,可以使用的npm help 命令名

解决npm被墙问题

方法一:
安装cnpm:npm install -g cnpm --registry=https://registry.npm.taobao.org
方法二:把下载源改了。

核心模块

  • 使用的时候就可以通过 require('包名') 的方式来进行加载才可以使用。
  • 核心模块的本质也是文件。
  • 核心模块文件已经被编译到了二进制文件中了,我们只需要按照名字来加载就可以了。

第三方模块

  • 凡是第三方模块都必须通过 npm 来下载。
  • 使用的时候就可以通过 require('包名') 的方式来进行加载才可以使用。
  • 注意:

    • 不可能有任何一个第三方包和核心模块的名字是一样的。
    • 第三方模块既不是核心模块、也不是路径形式的模块。
    • 它的加载原理如下:

      • 先找到当前文件所处目录中的 node_modules 目录(从该文件的位置开始,一层层的向上查询,直到找到该目录,或者找到磁盘根目录)。
    • 找到该模块的文件夹。
    • 找到该模块的文件夹内的package.json 文件。
    • 找到该模块的文件夹内的package.json 文件中的 main 属性。
    • main 属性中就记录了 art-template 的入口模块。
    • 然后加载使用这个第三方包,实际上最终加载的还是文件。
    • 如果 package.json 文件不存在或者 main 指定的入口模块是也没有,则 node 会自动找该目录下的 index.js,也就是说 index.js 会作为一个默认备选项。
    • 如果以上所有任何一个条件都不成立,则会进入上一级目录中的 node_modules 目录查找如果上一级还没有,则继续往上上一级查找。如果直到当前磁盘根目录还找不到,最后报错:can not find module xxx var template = require('art-template')
    • 我们一个项目有且只有一个 node_modules,放在项目根目录中,这样的话项目中所有的子目录中的代码都可以加载到第三方包,不会出现有多个 node_modules
    • 模块查找机制

      • 优先从缓存加载
      • 核心模块
      • 路径形式的文件模块
      • 第三方模块

非路径形式的模块标识(自己写的模块)

  • 路径形式的模块:

    • ./ 当前目录,不可省略
    • ../ 上一级目录,不可省略
    • /xxx 绝对路径,从该文件的磁盘根目录开始(几乎不用)
    • d:/a/foo.js 绝对路径(几乎不用)
    • 首位的 / 在这里表示的是当前文件模块所属磁盘根路径
    • .js 后缀名可以省略
  • 引入方式require('./foo.js')

  • 在 Node 中,每个模块内部都有一个自己的 module 对象。
  • module 对象中,有一个成员叫:exports 也是一个对象。
  • 我们可以把需要导出的成员都挂载到 module.exports 接口对象中,也就是:moudle.exports.xxx = xxx 的方式,但是每次都 moudle.exports.xxx = xxx 很麻烦,点儿的太多了,所以 Node 为了你方便,同时在每一个模块中都提供了一个成员叫:exports,也就是说:exports === module.exports 结果为 true,所以对于:moudle.exports.xxx = xxx 的方式 完全可以:expots.xxx = xxx。
  • 当一个模块需要导出单个成员的时候,这个时候必须使用:module.exports = xxx 的方式,不要使用 exports = xxx 不管用,因为每个模块最终向外 return 的是 module.exports。
  • exports 只是 module.exports 的一个引用。
  • 所以即便你为 exports = xx 重新赋值,也不会影响 module.exports,但是有一种赋值方式比较特殊:exports = module.exports 这个用来重新建立引用关系的。

  1. 如果系统还没有安装git,请先安装git:yum install git
  2. 然后从 github clone nvm 到本地, git clone https://github.com/cnpm/nvm.git
  3. 配置终端启动时自动执行 source ~/git/nvm/nvm.sh, 在 ~/.bashrc, ~/.bash_profile, ~/.profile, 或者 ~/.zshrc 文件添加以下命令:source ~/git/nvm/nvm.sh
  4. 最后通过nvm安装你需要的版本nvm install 10.7.0
  5. 检测是否成功,输入node --v显示版本号就成功了。

1.首先查看ifconfig所在的命令包:yum search ifconfig
0.png
2.安装该命令包:yum install net-tools.x86_64,安装过程中需要两次确认,直接输入y就行。
1.png
3.安装成功之后就可以使用ifconfig命令了。