李锋涛

石看纹理山看脉,人看志气树看材

  • 主页
所有文章 友链 关于我

李锋涛

石看纹理山看脉,人看志气树看材

  • 主页

title: Vue学习第三天
date: 2016-9-21 15:00:52

tags: vue

watch 监听

 vm.$watch(name,fnCb)// name:要被监视的数据
fnCb要执行的回调函数 (此为浅度监视)
vm.$watch(name,fnCb,{deep:true})(此为深度复制)

动画 animate

        推荐使用animate.css插件
    使用方法:1安装 npm i --save vue2-animate (以webpack依赖)
    2 在main.js中引入
require('vue2-animate/dist/vue2-animate.min.css')
    或者
    import 'vue2-animate/dist/vue2-animate.min.css';
    3 然后使用(可以看API)

组件 (组件里面放数据:data必须是函数形式,函数必须返回一个对象(json)

1 全局组件注册方式:Vue.component(组件名,{方法})
例: <div id="app">
       <my-component></my-component>
     </div>
     Vue.component("my-component",{
         template:"<h1>我是全局组件</h1>"
     });
     new Vue({
     el:"#app"
     });
 注意:全局组件必须写在Vue实例创建之前,才你能在根元素下面生效
 2 局部组件   直接在Vue实例里面注册
 例:<body>
     <div id="app1">
    <child-component></child-component>
 </div>
 <script>
    new Vue({
 el: "#app1",
 components:{
     "child-component":{
         template:"<h1>我是局部组件</h1>"
     }
 }
 });</script>
 局部组件需注意:1 属性名为components, S千万别忘
 2 最好模板定义在一个全局变量里
 方法如下: var child={
     template:<h1>我是局部组件</h1>"
 }
  new Vue({
 el: "#app1",
 components:{
     "child-component":child
 } });
        3 组件模板 
    例:<div id="box">
     <my-aaa></my-aaa>
     </div>
     <template id="aaa">
     <ul>
         <li v-for="val in arr">
             {{val}}
         </li>
     </ul>
     </template>
     <script>
     var vm=new Vue({
     el:'#box',
     components:{
         'my-aaa':{
     data(){
         return {
             msg:'welcome vue',
             arr:['apple','banana','orange']}},                        
     methods:{
         change(){
             this.msg='changed';
         }},                    
     template:'#aaa'
     }}});</script>
     4 动态组件 <component :is="组件名称"></component>  (主要考察的是is)
     例:    <div id="box">
     <input type="button" @click="a='aaa'" value="aaa组件">
     <input type="button" @click="a='bbb'" value="bbb组件">
     <component :is="a"></component>
     </div>
     <script>
     var vm=new Vue({
         el:'#box',
         data:{
             a:'aaa'    },    
         components:{
             'aaa':{
                 template:'<h2>我是aaa组件</h2>'},        
             'bbb':{
                 template:'<h2>我是bbb组件</h2>'
             }}});
     </script>

展开全文 >>

hexo博客的打开及发布

2017-10-21

新建

在页面打开 git base Heare,然后输入hexo new '博客的名称'

生成及发布

      以后每次新建文章后,待你完成编辑。即可以此执行下面几个命令来把新的文章部署到服务器上: 
- hexo clean 
- hexo g 
- hexo d
  • hexo

展开全文 >>

github+Hexo博客更换主体外观

2017-08-28

所需步骤

1  找到blog本地存储的地方,点击themes进去
2 右击选择Git bash 
3 下载所需要的主题
4 博客最底层目录下的_config.yml,把themes的名字改成下载的主体名称
5 然后输入hexo s --debug 进行本地测试
6 找到主题配置文件_config.yml,然后配置自己想要的界面
7 输入 hexo clean ; 
8 hexo genarate回车, 生成
9 hexo deploy  发布

关于发布后,在github上的改动

1 点击creat new file 在仓库地址后面加CNAME。
2 然后加上自己的域名
  • github

展开全文 >>

上传代码到github

2017-08-20

一:创建一个本地的版本库(其实就是一个文件夹)

1 点击进去,右击选择Git bash
2 通过命令git init 把文件夹变成Git可管理仓库
3 这时候你就可以把你的项目粘贴到这个本地Git仓库里面(粘贴后你可以通过git status来查看你当前的状态),
然后通过git add把项目添加到仓库(或git add .把该目录下的所有文件添加到仓库,注意点是用空格隔开的)。
在这个过程中你其实可以一直使用git status来查看你当前的状态。

git 三步走

1 git add .   添加
2 git commit -m '信息描述'   把项目递交到仓库
3 git status   查看状态

在github上创建库

1 和本地库关联,根据创建好的Git仓库页面的提示,可以在本地TEST仓库的命令行输入:
git remote add origin github库的地址
注意:origin后面加的是你Github上创建好的仓库的地址。
例如:$ git remote add origin https://github.com/guyibang/TEST2.git

关联好之后我们就可以把本地库的所有内容推送到远程仓库(也就是Github)上了,通过:

git push -u origin master
由于新建的远程仓库是空的,所以要加上-u这个参数,等远程仓库里面有了内容之后,下次再从本地库上传内容的时候只需git push origin master可以了:

注意:创建远程仓库的时候,如果你勾选了Initialize this repository with a README(就是创建仓库的时候自动给你创建一个README文件),那么到了第九步你将本地仓库内容推送到远程仓库的时候就会报一个failed to push some refs to https://github.com/guyibang/TEST2.git的错

解决方法:git pull --rebase origin master
  • github

展开全文 >>

Node.js 入门(一)

2017-04-12

初识node.js

node.js是javascript运行的一个环境 基于chrome浏览器的v8引擎
node.js的特点: 事件驱动,无阻塞的io模型,使node轻量高效
包生态系统---->npm  node package manager是一个客户端工具 世界上最大的包管理系统

浏览器与node.js运行js的模型

1 浏览器与js的关系   被动
2 node.js 与js的关系  主动
3 node.js 如何运行js 文件
答:node +文件路径,node是调用已经安装的node应用程序
文件路径是给node 传的一个参数

如何执行js文件

1 用node执行js文件,文件在当前目录下---->node +文件名
2 如果不在当前目录下,node +文件路径的形式执行

   相对路径
       ./ 当前路径
       ../ 上级目录

     绝对路径执行js的方式
    node c:\Users\cena\Desktop\code\01helloworld.js
    注意点:不能跨盘去调用js文件

js的引擎

1 转化: 汽油转化能量
例如: 模板引擎  模板+数据---》页面
     js引擎   js代码--->可以被电脑运行的代码     
 2.移植  node是给v8引擎套了一个壳

node 的应用场景

1 读写文件
2 写网站后端(服务器)

总结:

注意点: node 是后台的技术,是门技术不是语言,使用js干后台干的事情

如何确认是否安装成功?

`win + r` ,然后输入 `cmd` ,然后敲回车 就可以进入 cmd 控制台
  node -v

node 的群居环境

  global和window很像,都是全局对象
node运行js的时候一个js里面的代码的作用域就是这个js

node.js 得模块化

1 一个js文件就是一个模块,模块里面的代码的作用域就在这个文件中
优点 1.一次编写多次使用
      2.便于维护
2. node的模块化符合commonjs规范
所谓的模块化开发其实也就是如何有效的组织你的JavaScript代码
全局函数直接写到html中
将js代码提取出来放到单独的js文件中
封装对象的方式解决全局函数面临的问题
给对象加入独立的作用域空间

commonjs规范

希望JavaScript可以在任何地方运行,以达到像Java、PHP、Ruby、Python具备开发大型应用的能力
出发点:
没有模块系统
标准库较少
缺乏包管理系统
1. 模块引用require
2. 模块定义
一个文件就是一个模块
将方法挂载到exports对象上作为属性即可定义导出的方式
3. 模块标识
必须是符合小驼峰命名的字符串
以.、..开头的相对路径
绝对路径
可以没有文件名后缀.js

commonjs 特点

所有代码都运行在模块作用域,不会污染全局作用域
模块可以多次加载,但是只会在第一次加载时运行一次,然后运行结果就缓存了,以后再加载,就直接读取缓存结果。
模块加载的顺序,按照其在代码中出现的顺序

node.js 模块介绍

Node程序由许多模块组成,每个模块就是一个文件。Node模块采用了CommonJS规范。
Node.js本身就是一个高度模块化的一个平台
根据CommonJS规范,每一个模块都是一个单独的作用域
CommonJS规定,每个文件对外的接口是module.exports对象,该对象所有属性和方法,都可以被其它文件导入。

module 模块对象

    module.id    带有绝对路径的模块文件名
    module.filename      模块的文件名,带有绝对路径
    module.loaded          表示模块是否已经完成加载
    module.parent        返回一个对象,表示调用该模块的模块。
    module.children      返回一个数组,表示该模块要用到的其他模块。
    module.exports          模块对外输出的值


当运行js的时候,有一个js,node 就会为其创建一个module去存储这个js的相关信息

module.exports 全局对象

module.exports属性表示当前模块对外输出的接口,其它文件加载该模块,实际上就是读取module.exports属性
点儿导出单个函数、对象或者值的时候非常有用,本质上就是少了一个.

module.exports 打破封装性,通过模块间传递module.exports对象,来打破封装性
module.exports 是全局的对象,初始值是空对象
暴露什么(方法、对象、数字)都行
module.exports=123 使用直接赋值的形式只能使用一次
module.exports.foo=123;
module.exports.bar=456;使用属性赋值的形式能够使用多次
exports替代module.exports在属性赋值的时候使用

require 全局方法

第一次加载js(module)的时候,会执行一遍js里面的代码
第二次加载js的时候,不执行js代码的,直接去内存中找到第一次加载js对应的module对象,
从中找到module.exports

exports

exports 是module.exports的别名,外号、花名

模块化总结

1. 模块化的代码具有封装性,对代码进行包装,我想让你用什么接口,使用什么
2. 有封装就有打破封装,需要给别人开接口 module.exports exports
3. module.exports直接赋值
4. exports 当一个js中有很多的属性很方法的时候,就使用exports向外曝露

5. 一个js文件就是一个模块
6. 一个模块的信息被保存在module对象里面,每一个模块都有一个module与之对应
   module对象产生了以后,第二次加载就不会再去执行,而是去内存中的module对象中找module.exports

模块得种类

第一类,核心模块(原生模块),node自带,用名称直接可以加载。
核心模块
  + fs file system 文件系统
  + http  制作网站的
  + os   获取电脑信息    
  + path 路径拼接用的
  + query  
  + url
  ...
  require('fs')
核心模块存在的意义,
  我们需要node给我们提供一些方法,让我们可以方便的去处理电    脑的硬件,
第二类,文件模块,用路径加载,有一种特殊的文件模块----->包,可以用名字。

什么是3m?

npm nrm nvm 

require 参数解析

    require('./foo');
    require('fs');//

引入一个叫fs的模块,node会帮我们把fs加载进来
var fs=require('fs');

fs.readFile() 读文件

参数:1 路径
    2 编码格式
    3 回调函数 1,err错误对象  2 读得参数
fs.readFile('路径','utf8',function(){

    })

包

还有一种特殊的文件模块,其实就是包
包的作用:在模块的基础上进一步组织JavaScript代码

包得组成

   包结构
包就是一个文件夹,文件夹的名字最好是包名。
(1、2是必选项)
    1. 入口文件 index.js或app.js  写大的应用例如网站的时候,叫app.js
    2. 包说明文件,不只是给人看的~~~~---->package.json
    3. lib文件夹 存放js文件的
    4. bin文件夹 二进制文件或者脚本文件
    5. test  测试文件夹
    6. docs  文档放这里
    7. node_modules 如果我需要引入别的包,不能改

  8 包描述文件package.json
    描述你的当前的包的一些相关的信息

package.json 属性解释

- name 包名
- version 版本号
- description 包的描述
- main 入口文件
- keywords 关键词
- author 作者
- repository 代码库地址
- bugs 提交地址
- license 许可证
- devDependencies 开发环境包依赖
- dependencies 生产环境包依赖

+ dependencies

-  包名:“版本号” 
-  > +版本号   下载大于某个版本号,npm会下最新版
-  < +版本号   下载小于某个版本号,npm会下小于这个版本号最新版
-  <= 小于等于 一定会下你写的这个版本,除非没有你写的这个版本
-  >= 大于等于  下载最新版
-   *、" "、X  任意 npm会给你下最新版
-   ^ +版本号  不跃迁版本下载,^2.1.0 npm会下载大版本不变,去下载2.x.x版本里的最近版
-   ~ +版本号  会去下约等于这个版本的最新版,在大版本不变的情况下下一个比较新的版本

语义化版本号

1.2.3
1表示重大更新
2表示向下兼容
3表示补丁包更新

npm

即为node package manager 得缩写 
(通过 npm help 查看命令列表 
npm –l 查看各个命令的简单用法)

- 基于Node.js开发的包的托管网站
- Node.js包管理工具

npm :基于包的规范实现的一个包管理工具
1 npm init 初始化一个package.json

2 npm install  安装package.json里面设定好的依赖的包

- npm install 包名
  npm i jquery@3.2.1

3 npm install --save 生产环境
npm i -S jquery

4  npm install -g 包名 只要是全局安装就是安装命令行工具

- npm install 缩写 npm i
- npm install -save-dev 开发环境
npm i -D jquery
5 npm config set prefix  修改全局安装目录

箭头函数

        箭头函数就是一种语法糖
语法糖是一种语法,用这种语法能尝到甜头,能是编程高效
当函数体有一个参数有返回值的时候

var foo=function(v){ return v;}
var foo=v=>v;
当函数体没有参数有返回值的时候

var foo=function(){ return v;}

var foo=()=>v;
当函数体有多个参数有返回值的时候

var foo=function(v1,v2){ return v1+v2;}
var foo=(v1,v2)=>v1+v2;
当函数体有多个参数没有返回值的时候
var foo=function(v1,v2){ 
  console.log(v1); console.log(v2);
  }
var foo=(v1,v2)=>{
  console.log(v1); console.log(v2);
  };

展开全文 >>

开发

2017-04-12

5天课程

  • 1:webpack基本知识,前端模块构建工具 vue结合,通过webpck来构建一个vue的应用
    • vue两种方式构建,独立构建方式,引包,一个一个js再引入
    • 通过webpack运行时构建,单文件的方式
  • 2: vue基本知识,vue常用指令,组件的思想和运用,组件通信。。。遗留一点点小知识点,到项目中直接使用
  • 3-5:项目开发

今日重点

  • webpack.config.js文件中相关属性的作用

webpack启程


历史介绍

  • commonjs:使用js语法要求的后端语言的规范,模块化、后端语言需要具备的一些要求,可以http、操作文件。。。。
    • require/module.exports
    • 计算器案例:
      • +-*/ -> cal.js
      • index.js 作为页面中动态操作主文件,使用cal.js内部的功能
      • index.html 引入顺序
      • 两大问题: 文件依赖顺序、全局函数命名冲突
  • 2009年,commonjs规范还未出来,此时前端开发人员编写的代码都是非模块化的,
    • 那个时候开发人员经常需要十分留意文件加载顺序所带来的依赖问题
  • 与此同时 nodejs开启了js全栈大门,而requirejs在国外也带动着前端逐步实现模块化
    • 同时国内seajs也进行了大力推广
    • AMD 异步模块定义 requirejs
    • CMD seajs和nodejs非常相似
  • AMD和CMD的区别
    • amd 加载前置,需要的依赖提前加载好,在代码上提前声明
    • cmd 依赖滞后(延迟加载),代码也是用的时候才引入
      • commonjs包含模块定义,和CMD比较相似
  • npm集中包管理的方式备受青睐,12年bower、browserify诞生
    • browserify 最大的功能是为了让require的语法能够在浏览器中运行
    • 并且有相关的一些插件可以结合使用 gulp、ES6语法转化
    • 此时爆发大量前端工具 webpack也在其中,其是一款模块打包工具
      • 压缩、合并、混淆 + 结合插件的代码转化 ,自动化一气呵成
        、systemjs:万能模块打包工具、跟angular抱大腿,angular4用了

webpack优点

  • 模块来源广泛,支持包括npm/bower等等的各种主流模块安装/依赖解决方案
  • 模块规范支持全面,amd/cmd以及shimming等一应具全
  • 浏览器端足迹小,移动端友好,却对热加载乃至热替换有很好的支持
  • 插件机制完善,实现同样模块化,容易扩展

webpack基本操作

  • npm进行安装
    • 全局安装方式 npm install(i) webpack -g
    • 1:进入到webpack需要进行分析打包的文件夹目录下
      • 命令 webpack 入口文件 出口文件
        • 在index.html文件中,直接引入出口文件

使用webpack打包解决文件依赖关系

  • 基本操作方式:
    + `webpack ./main.js ./build.js` -p(压缩混淆)
    

使用webpack配置文件

  • webpack在命令行输入webpack命令的时候,首先会在当前的目录查看有没有webpack.config.js文件的存在,如果有,即读取该文件,按该文件的指令来做打包操作
    • 如果没有,才走命令

总结

  • webpack可以运行的两种方式 cli option (命令行及设置)
  • 通过webpack.config.js文件运行
    • 所有的配置属性都在module.exports = {内部配置}
1
2
3
4
5
6
7
8
9
10
11
module.exports = {
//指定入口文件
entry :{
//这里可以有多个入口
main:'./main.js', //主入口
},
output:{ //出口
filename:'./build.js'
}
}
//最终我们到当前有webpack.config.js文件的目录来执行 webpack命令就可以了

es6


babel语法转换器

  • js代码转换工具
    • ES6、ES7..react 语法的转换工具
      • 他本身自带转换cli ,你可以通过npm install babel-cli -g 的全局命令行工具,来完成单独的转化
      • 他也提供了别的工具使用的支持
        • 比如browserify babelify
        • 比如 webpack babel-core ……
      • 烦心: babel默认只提供了es6关键字的转换 let const
      • 如果涉及到es6或者es7函数,就需要特定的设置插件
  • 1:安装babel核心工具包
    • babel-core
  • 2:配置babel的预设? babel是一个语法转换器,包含es6/7/react,就是告诉babel要将什么转换成什么,告诉其转化ES6到ES5,预先设置
    • babel-preset-es2015
  • 3:babel不转换函数API,配置插件,babel-plugin-transform-runtime
  • 4: webpack需要一个babel-loader

webpack-ES6的处理总结

  • 在babel-loader的处理中,一定加上exclude: /node_modules/,排除node_modules部分
  • babel是什么? 语法转换器
    • babel可以转化ES6、ES7、react
    • 默认只转换ES6、关键字
      • 提供预设转换ES6关键字 下载 npm i babel-preset-es2015 --save-dev
      • 在webpack中配置的方式: presets:['es2015']
    • 不转换函数
      • 提供插件
        • 安装: npm i babel-plugin-transform-runtime --save-dev
        • 在webpack中配置的方式: plugins:['transform-runtime']
    • 还需要核心包 babel-core 只需要安装就可以了 npm i babel-core --save-dev
  • webpack要与babel结合就需要babel-loader

    • npm i babel-loader --save-dev
  • 配置方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
module.exports = {
//入口
entry:{
main:'./main.js',
},
output:{//输出
filename:'./build.js',
},
module:{
loaders:[
{
test:/.js$/,//正则表达式,指定以.js后缀结尾的文件由我这个loader来处理
loader:'babel-loader',
options:{
presets:['es2015'],
plugins:['transform-runtime'],
}
}
]
}
}

引入css

  • 原理:通过js代码动态创建css对象,再通过style标签,做动态插入
  • 具体操作:
    • 原来我们有es6的解析,此时,暂时把其移除了,
    • 留下的是通过require的方式引入css,
      • import ‘./index.css’ 也是一样的操作
  • 配置方式
1
2
3
4
5
6
7
8
9
10
11
12
module.exports = {
//入口+ 出口
module:{
loaders:[
{
test:/.css$/,//需要操作的文件->正则
loader:'style-loader!css-loader'
}
]
}
}
  • 如何在main.js中使用某个css?
    • 不使用es6的方式,require('./index.css');
    • 使用ES6导入的方式 import './index.css';

css + autoprefixer

  • 1:安装包npm i autoprefixer-loader -D
  • 2: 在配置文件中加入 loaders内部加入一个对象:{ test: /.css$/,loader:’style-loader!css-loader!autoprefixer-loader’ }

less的使用

  • 和css前面的操作都一样
    • 提前编译less需要 less-loader 和less这两个包
    • 安装依赖包 npm i less-loader less -D
  • 配置文件的写法
1
2
3
4
5
6
7
8
9
10
11
module.exports = {
module:{
loaders:[
{
test:/.less$/,
loader:'style-loader!css-loader!autoprefixer-loader!less-loader'
}
]
}
}
  • 由于less-loader依赖于less 所以需要先下载less,再下载less-loader

处理图片

  • 需要先下载:
  • 原理:会把依赖的图片生成一个url,通过该url去访问图片,由于需要读取图片,就需要操作文件,由此: 需要file-loader + url-loader

    • url-loader不用在webpack中写出来,只用安装即可
  • 设置limit=1 的时候生成了一张图片,然后build.js大小是73kb

  • 设置limit=199182 的时候,大图片了一个字节,就不生成图片

base64编码

  • A-Za-Z0-9+/ 共是64个
  • 他可以跟随css一起加载,减少请求次数到0
  • 不适合过大的图片,只能是小图片,频繁使用的小图片
  • 普遍用在邮件的发送中
  • 常规认为base64图片加密会增大个三分之一左右
  • 注意:其不是绝对为了加密的产生,可以编码也可以解码,但是可以将二进制的数据作为字符串传输

base64 在node中的编码解码

Buffer.from(‘javascript’).toString(‘base64’);
‘amF2YXNjcmlwdA==’
Buffer.from(‘amF2YXNjcmlwdA==’,’base64’).toString(‘utf8’);
‘javascript’

yarn的使用

  • 安装全局命令行工具 npm i yarn -g
  • 安装对应的包
    • 安装一个包 yarn add 包名@版本号 -S|-D
    • 卸载一个包 yarn remove 包名@ -S|-D
    • 恢复所有package.json文件中依赖的包 npm install [--production]
      • 只恢复生产依赖的包,既-S的包
    • yarn中恢复包的命令就是 yarn install [--production]
    • 更新到最新 yarn update 包名

总结上午问题

  • ES6报错
  • commonJS 模块化和 ES6模块化方式区别
    • commonJS模块化中的使用方式
      • 导入: var xxx = require(‘模块路径ID’);
      • 导出: module.exports = xxxx;
    • 导入:
      • 导入文件不需要返回值:
        • import ‘./文件路径’;
      • 导入需要返回值:
        • import 变量名 from ‘./文件路径.js’;
      • 导出:
        • export default xxx;

处理字体图片

  • 比较流行的一种方案
    • 相比图片,大小更小
    • 更灵活,可以通过font-size。。。设置其大小
  • 也会使用到字体图标

MUI

  • http://dev.dcloud.net.cn/mui/

生成html文件插件

  • webpack-html-plugin
  • 安装这个插件,这个插件依赖于webpack

    • webpack -> 在任意命令行使用webpack命令
    • 如果在js文件中,存在webpack对象的话,是不是必须让其作为项目的依赖
    • 该插件依赖于webpack
  • 操作步骤:

    • 1:安装webpack和webpack-html-plugin插件
      • 在webpack.config.js文件中进行配置
1
2
3
4
5
6
7
8
三大属性:entry、output、module
const webpackHtmlPlugin = require('webpack-html-plugin');
plugins:[
new webpackHtmlPlugin({
filename:'index.html',//生成的文件名
template:'./src/html/index.html',//参照的文件名
})
]
  • 注意,09案例中,我们把相对路径都进行了更改,此时有些entry和output我们需要做一个改动,最好检查template:’./src/html/index.html’

webpack-dev-server

  • 这个工具包含前面提到热加载,热替换功能,
    • 修改css或者一些加载过程中的代码,立刻不通过刷新,直接改变
    • 只要是你上级包含非法符号,就会导致热替换不成功、无法监视你的文件改动,获取不了目录、{}()
1
2
3
4
5
6
7
8
9
module.exports = {
module:{},
plugins:[
new webpackHtmlPlugin({
filename:'index.html', //虚拟的html文件,供webpack-dev-server使用
template:'./src/html/index.html'
})
]
}
  • 启动命令 ,.在package.json文件的目录下
    • 运行命令 yarn test
      • 实际运行的是scripts: test命令
        • ../node_modules/.bin/webpack-dev-server –inline –hot –open –port 9999
  • 相关命令:
    • inline 自动刷新
    • hot 热加载、热替换(不经过刷新,不重启程序)
    • open 自动打开浏览器
    • port 指定端口

最终效果

  • 启动webpack命令 能在dist下面运行index.html
  • 在package.json文件的目录能运行yarn test 启动程序,修改代码实现热替换

ES6中的模块

  • import 对象 from ‘./xxx.js’;
  • 和按需加载 import {对象中的属性} from ‘./xxx.js’;
  • 注意:一个默认导出,是不区分名称的,按需加载必须区分名称
    • 按需加载 引入的时候 import { 接口名称} from ‘./xx.js’
    • 导出:
      • 1:声明式导出 export var add(接口名称) = function(){ }; //类似export {add}
      • 2: 在代码最终导出
        • export {接口名称||对象,多个… }
    • 按需的方式一定要名称对应

ES6中的代码变化

  • 函数的声明:
    • var obj = { add:function(){ } }
    • 简写: var obj = { add(){} }
    • 声明对象:var name=’abc’; var obj = {name} //obj的name属性的值就是abc

VUE


简单介绍

尤雨溪毕业于上海复旦附中,在美国完成大学学业,本科毕业于Colgate University,后在Parsons设计学院获得Design & Technology艺术硕士学位,现任职于纽约Google Creative Lab。
2014年2月,开源了一个前端开发库Vue.js。Vue.js 是构建 Web 界面的 JavaScript 库,是一个通过简洁的API提供高效的数据绑定和灵活的组件系统。
2016年9月3日,在南京的JSConf上,Vue作者尤雨溪正式宣布加盟阿里巴巴Weex团队,尤雨溪称他将以技术顾问的身份加入 Weex 团队来做 Vue 和 Weex 的 JavaScript runtime 整合,目标是让大家能用 Vue 的语法跨三端

作为库的使用方式(渐进式、初体验)、独立构建

  • 双向数据绑定
    • 1:引入文件
    • 2: 通过全局的Vue对象构造了一个vue的实例
    • 3:传递一个对象作为参数
      • el 未来由vue来管理的元素
      • data:{ text:’xxx’} //这些属性可以在模板当中使用
      • template: ‘

        ‘ 设置了template就会覆盖原来的内容

单文件的使用方式(运行时构建)

  • 以一个个的xxx.vue的文件形成
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <template>
    <!-- 放置html内容的地方,可以使用vue中的一些对象,进行双向数据交互 -->
    </template>
    <script>
    //组件动态操作,数据初始化
    //存放一些js代码,可以操作当前模块页面组件对象的属性值及相关动态操作
    </script>
    <style scoped>
    /*给定一个scoped属性以后,这个css只在当前的template中有效*/
    </style>

展开全文 >>

jQuery浅谈(四)

2017-04-11

jQuery操作尺寸

1 height  设置或者获取高度

    带参数表示设置高度
    $(“img”).height(200);
    不带参数获取高度
    $(“img”).height();
    返回值是number类型(比如200),而使用$(“img”).css(“width”)返回的是字符串(比如200px)
2 width    设置或获取宽度,与高度操作功能一样

    带参数表示设置宽度
    $(“img”).width(200);
    不带参数获取宽度
    $(“img”).width();

jQuery 操作坐标值

1 offset   设置或获取元素相对于文档document位置        
    设置位置

    $(selector).offset({left:100, top: 150});
    获取位置
    $(selector).offset();
    注意:使用offset操作,如果元素没有设置定位(默认position:static),则会把position修改为relative.会修改left、top

2    position 获取相对于其最近的有定位的父元素的位置

    获取,返回值为对象:{left:num, top:num}        
    $(selector).position();
    注意:position方法只能获取,不能设置

3  scrollTop 设置或者获取垂直滚动条的位置

    有参数表示设置偏移,参数为数值类型
    $(selector).scrollTop(100);
    无参数表示获取偏移
    $(selector).scrollTop();

4  scrollLeft 设置或者获取水平滚动条的位置

    有参数表示设置偏移,参数为数值类型
    $(selector).scrollLeft(100);
    无参数表示获取偏移
    $(selector).scrollLeft();

jQuery事件机制

JavaScript中已经学习过了事件,但是jQuery对JavaScript事件进行了封装,增加并扩展了事件处理机制。jQuery不仅提供了更加优雅的事件处理语法,而且极大的增强了事件的处理能力。

jQuery事件的发展历程

    简单事件绑定>>bind事件绑定>>delegate事件绑定>>on事件绑定(推荐)
1 简单事件绑定
    click(handler)  单击事件
    mouseenter(handler)  鼠标进入事件
    mouseleaver(handeler) 鼠标离开事件
    scroll(handler)   滚动事件
    缺点: 一次只能绑定一次事件
2 bind 事件绑定    
    不推荐使用,jQuery1.7版本后被on取代
    绑定多个事件
    第一个参数:事件类型
    第二个参数:事件处理程序
    $("p").bind("click mouseenter", function(){
    事件响应方法
    });
    缺点:不支持动态创建出来的元素绑定事件。
3 delegate 事件绑定
     第一个参数:selector,要绑定事件的元素
     第二个参数:事件类型
     第三个参数:事件处理函数
    $(".parentBox").delegate("p", "click", function(){
    为 .parentBox下面的所有的p标签绑定事件
    });
    理解:为什么delegate支持动态绑定事件?原因是事件冒泡机制。因为事件时绑定到父元素上的,由子元素触发。

on 事件绑定(重点)

jQuery1.7之后,jQuery用on统一了所有事件的处理方法。
优势:最现代的方式,兼容zepto(移动端类似jQuery的一个库),强烈建议使用此。

 第一个参数:events,绑定事件的名称可以是由空格分隔的多个事件(标准事件或者自定义事件)
 第二个参数:selector, 执行事件的后代元素(可选),如果没有后代元素,那么事件将有自己执行。
第三个参数:data,传递给处理函数的数据,事件触发的时候通过event.data来使用(不常使用)
 第四个参数:handler,事件处理函数
$(selector).on(events[,selector][,data],handler);

例子:
 表示给$(selector)绑定代理事件,当必须是它的内部元素span才能触发这个事件,支持动态绑定
$(selector).on( "click",“span”, function() {});
表示给$(selector)绑定事件,并且由自己触发,不支持动态绑定(不使用代理)。

$(selector).on( "click", function() {});

事件解绑

1     unbind() 方法
    $(selector).unbind(); //解绑所有的事件
    $(selector).unbind(“click”); //解绑指定的事件
2  undelegate() 作用:解除事件绑定
    ( selector ).undelegate(); //解绑所有的delegate事件
    $( selector).undelegate( “click” ); //解绑所有的click事

off 作用:解除绑定

 解绑匹配元素的所有事件
$(selector).off();
解绑匹配元素的所有click事件
$(selector).off(“click”);
 解绑所有代理的click事件,元素本身的事件不会被解绑 
$(selector).off( “click”, “**” ); 

事件触发

简单事件触发
$(selector).click(); //触发 click事件
trigger方法触发事件
$(selector).trigger(“click”);
triggerHandler触发 事件响应方法,不触发浏览器行为
比如:文本框获得焦点的默认行为
$(selector).triggerHandler(“focus”);

jQuery 事件对象()

    事件类型
event.type     对象属性    
event.data     存储绑定事件时传递的附加数据
event.target   点了谁就是谁
event.currentTarget  当前DOM元素,等同于this
event.delegateTarget  代理对象
screenX和screenY   对应屏幕最左上角的值
offsetX和offsetY    点击的位置距离元素的左上角的位置
clientX和clientY   距离页面左上角的位置(忽视滚动条)
pageX和pageY    距离页面最顶部的左上角的位置(会计算滚动条的距离)
event.witch   鼠标按键类型,1=鼠标左键 2=鼠标中键 3=鼠标右键
event.keyCode  按下的键盘代码
event.stopPropagation()   阻止事件冒泡行为
event.preventDefault()  阻止浏览器默认行为
return false;

链式编程

链式编程原理:return this;
通常情况下,只有设置操作才能把链式编程延续下去。因为获取操作的时候,会返回获取到的相应的值,无法返回 this。


end(); // 筛选选择器会改变jQuery对象的DOM对象,想要回复到上一次的状态,并且返回匹配元素之前的状态。

隐式迭代

隐式迭代的意思是:在方法的内部会为匹配到的所有元素进行循环遍历,执行相应的方法;而不用我们再进行循环,简化我们的操作,方便我们调用。
如果获取的是多元素的值,大部分情况下返回的是第一个元素的值。
设置性操作的时候:设置的是所有的元素
获取性操作:获取的是第一个元素。

each 方法

    有了隐式迭代,为什么还要使用each函数遍历?

    大部分情况下是不需要使用each方法的,因为jQuery的隐式迭代特性。
如果要对每个元素做不同的处理,这时候就用到了each方法

作用:遍历jQuery对象集合,为每个匹配的元素执行一个函数
参数一表示当前元素在所有匹配元素中的索引号
参数二表示当前元素(DOM对象)
$(selector).each(function(index,element){});

多库共存

    我们知道jQuery占用了$这个标识符,如果引用的其他库也用到$这个标识符,这时候为了保证每个库都能正常使用,这时候就存在了多库共存的问题。
    后引入的$的会覆盖掉先引入的库中的$。
    $ === jQuery
    解决办法:
jQuery的$和jQuery是两个相同的变量,因此遇到多库共存的时候,可以让jquery交出$符的控制权,这个时候还是可以使用$.
console.log($);//function(selector, context){}
$.noConflict();//释放$的控制权
console.log($);{name:”zhangsan”,age:12}

jQuery(function () {
jQuery("div").html("我不是div的内容");
});
  • jQuery

展开全文 >>

浅谈RESTful

2017-04-11

RESTful 是什么?

一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和约束条件‘
主要用于客户端和服务器交互的软件。可以更简洁,更有层次,更易于缓存等机制。
地址/user/addUser  方法名 POST canshu {name:"lione","age":2}
响应 成功{success:"成功",data:{id:"ddddddd"}}
失败{error:"失败",data:{,msg:"哈哈哈"}}

1  增 GET /user 获取user信息列表  GET/getUserlist?page=1

2 查 GET /user/17  查看id为17的具体user信息 GET/getUserById?Id=1

 POST /user  新建一个user  POST/addUser

3 改 PUT /user /17 更新id为17的user信息 PUT/updateUser

 4 删 DELETE /user/17 删除id为17de user信息 DELETE /delUserById?id=14

Es6

什么是Es6?

ECMAScript es标准的作用,定义js的发展方向的一套标准

为什么用es6?

新的语法,写起来更严谨更安全更简单

为什么前端不用,node要用?

js--->浏览器--->引擎执行js代码

node---->v8执行js代码
node 不考虑兼容性,es6能给我们带来好处。
node.js 覆盖了93%de ECMAScript 6 

user strict 严格模式

消除了javascript语法的一些不合理,不严谨之处,减少一些怪异行为
1 规范了javascript语法
2 告诉js引擎用什么语法解析
严格模式下不允许进行全局定义

let

使用let去定义变量  let  xx==00;
作用域:都在花括号内

const

const 使用来定义很顶的值
node 多用于包的引用,复合作用域在会计作用域内

模板字符串

var foo="asdhfhfjgg"
var bar="hehe"+foo+"haha"
var baz=`hehe${foo}haha`;
console.log(baz
)    

总结

展开全文 >>

jQuery浅谈(三)

2017-04-10

juery操作Dom(节点)

1 创建元素
    $(htmlStr)
    htmlStr:html格式的字符串
    $(“<span>这是一个span元素</span>”);
2 添加元素

      添加新建的元素
  +     方法一:将jQuery对象添加到调用者内部的最后面。 
    var $span = $(“<span>这是一个span元素</span>”);
    $(“div”).append($span);

    + 方法二:参数传字符串,会自动创建成jquery对象
    $(“div”).append(“<span>这是一个span元素</span>”);
    添加已经存在的元素
    var $p = $(“p”);
    $(“div”).append($p);
    注意:如果添加的是已经存在的元素,那么会把之前的元素给干掉。(类似于剪切的功能)。

    prepend() 在子节点的最前面插入    

    before() 在同级元素的前面插入

    after() 在同级元素的后面插入

    appendTo() 添加插入到... 括号内是目标元素
    例 : $("#text").appendTo("#box")
    prependTo() 和appendTo()正好相反
    例: $("#box").appendTo("#text")

清空元素

empty:清空指定节点的所有元素,自身保留(清理门户)
$(“div”).empty();//清空div的所有内容(推荐使用,会清除子元素上绑定的内容,源码)
清空元素的第二种方法
$(“div”).html(“”);//使用html方法来清空元素,有就保留,清除其他的,缺点是,内部标签有事件不清除。(不推荐使用,会造成内存泄漏,绑定的事件不会被清除。)

删除元素

remove( ):相比于empty,自身也删除(自杀),传谁 杀谁。

克隆元素 clone()

作用:复制匹配的元素
复制$(selector)所匹配到的元素(深度复制,即复制标签还复制事件)
cloneNode(true)
 返回值为复制的新元素,和原来的元素没有任何关系了。即修改新元素,不会影响到原来的元素。
$(selector).clone(false);
浅复制(复制标签和内容)

jQuery操作属性

1  设置单个属性
    第一个参数:需要设置的属性名
    第二个参数:对应的属性值
    attr(name, value);
    用法举例
    $(“img”).attr(“title”,”哎哟,不错哦”);
    $(“img”).attr(“alt”,“哎哟,不错哦”);

2     设置多个属性
    参数是一个对象,包含了需要设置的属性名和属性值
    attr(obj)
    用法举例
    $("img").attr({
    title:"哎哟,不错哦",
    alt:"哎哟,不错哦",
    style:"opacity:.5"
    });

获取属性

传需要获取的属性名称,返回对应的属性值
attr(name)
用法举例
var oTitle = $("img").attr("title");
alert(oTitle);
注意:
1.    获取属性时,只会获取到第一个元素对应的属性,与css方法一样
2.    获取属性时,如果该属性不存在,那么会返回undefined

移除事件 removeAttr()

参数:需要移除的属性名,如果传空,那么不会有任何操作,注意,并不是移除所有的属性。区分removeClass。
removeAttr(name);
用法举例
$("img").removeAttr("title");

prop

注意:在jQuery1.6之后,对于checked、selected、disable这类boolean类型的属性来说,如果使用attr方法获取属性值,得到的不是true和false,而是checked以及undefined。,使用prop方法来获取或者设置checked、selected、disable这类的值。prop方法使用跟attr方法一样。
设置属性
$(“:checked”).prop(“checked”,true);
获取属性
$(“:checked”).prop(“checked”);//返回true或者false

jQuery操作值与内容

1  val 方法
    val方法用于设置和获取表单元素的值,例如input、select、textarea的值
    设置值
    $(“#name”).val(“张三”);
    获取值
    $(“#name”).val();
2 html 方法
    设置内容
    $(“div”).html(“<span>这是一段内容</span>”);
    获取内容
    $(“div”).html()
3 text 方法
    设置内容
    $(“div”).text(“<span>这是一段内容</span>”);
    获取内容
    $(“div”).text()

html方法与text方法的区别:
html方法会识别html标签,text方法会把内容直接当成字符串,并不会识别html标签。
  • jQuery

展开全文 >>

AngularJs简介与学习(二)

2017-04-10

作用域

变量的作用域通常来说,在一段程序里面的某个变量的名字并不总是可用的,而限定这个变量的使用的范围就是作用域。

angular 的作用域

作用域的关系就像函数里面方法的作用域的关系一样。作用域指的是$scope 的数据能否被获取到.
有一个根作用域,以后我有一部分数据在整个应用里面是需要共享的,我就把这个数据赋值给$rootScope上面,我在应用的任何一个位置都可以获取.

过滤器

 1 内置过滤器
      date    日期
      currency 货币
      limitTo   截取字符串
      json     将对象转换成json 格式字符串
      uppercase  转换成为大写
      lowercase  转换成小写
      filter     获取数据,找到对应的数据,主要是用来做界面的搜索的
      number     获取数据,对数据的小数点做一个精确
      orderBy    排序,列表我就可以进行排序

2 自定义过滤器
    app.directive 自定义指令
    app.filter("") 自定义过滤器,有一个默认的参数

依赖注入

所谓依赖注入是指在运行时自动查找依赖关系,然后将查找到依赖传递给使用者的一种机制。
 通俗的讲就是通入注入的方式解决依赖关系。
 常见的AngularJS内置服务有$http、$location、$timeout、$rootScope等

1 $http 我们这个模块肯定是用来供后台进行交互的
2 $location 这个是angular 封装了一个location 对象,在暴露出来的api
3 $timeout  这个是封装了我们的一个函数 window.setTimeout()
4 $rootScope 这个$rootScope  $scope 模型数据. 我在$rootScope 里面绑定了数据,我在页面的任何地方都可以使用
这个数据.

5 $inteval 这个是封装了我们的一个函数 window.setInterval();

我们可以把这些功能都可以理解成服务。对外提供什么样的功能,就是对外提供什么样的服务.
我的模块要使用这些服务,就需要去注入这些服务
  注入有两种方式:
      1  行内式  第二个参数是数组
      2 推断式  第二个参数是函数
    我们推荐使用第一个种行内式,为了避免代码压缩.
  • AngularJs

展开全文 >>

« Prev1234…8Next »
© 2018 李锋涛
Hexo Theme Yilia by Litten
  • 所有文章
  • 友链
  • 关于我

tag:

  • AngularJs
  • css
  • css3
  • js
  • Gulp
  • html5
  • react
  • Vue
  • bootstrap
  • css 布局
  • github
  • hexo
  • git
  • html
  • jQuery
  • webpack
  • ES6
  • app
  • hexo+github

    缺失模块。
    1、请确保node版本大于6.2
    2、在博客根目录(注意不是yilia根目录)执行以下命令:
    npm i hexo-generator-json-content --save

    3、在根目录_config.yml里添加配置:

      jsonContent:
        meta: false
        pages: false
        posts:
          title: true
          date: true
          path: true
          text: false
          raw: false
          content: false
          slug: false
          updated: false
          comments: false
          link: false
          permalink: false
          excerpt: false
          categories: false
          tags: true
    

  • 阮一峰
很惭愧

菜鸟一枚
笔记只为自己参考学习