[笔记]这阶段的有道云笔记前端部分整理

js如今能够运行在

1.浏览器端

2.计算机操做系统上

经过大名鼎鼎的node, node是由c/cpp编写的js运行环境,大概是js经过编译变成c变成汇编变成机器语言。。。大概css

node编译
js
操做系统可执行机器语言

包安装工具

1.npm

2.bower

3.yarn

如今你们都推荐这个。。。听说更快更好html


构建打包工具(说实话这个我如今仍是分不清)

构建工具 任务执行器

帮助压缩文件?sprite?混淆等等需须要手工操做的简化?手工劳动 gulp grunt前端

打包工具 模块打包工具

模块化的代码最后组装打包上线用的,webpack browserify ,seajs require这两个是在浏览器端js现场打包,如今已经不推荐了vue


页面中的js

传统引入方式 script src

node动态引入

这个是个很神奇的 node的工具webpack动态的组装你的页面 好比使用node modules里面的插件 你并无实际用script引入到页面中这样子?暂时不理解的时候,不能用常理来考虑(vue-cli)dev时是动态组装build才把全部动态组装的打包好成一个。。。node


es2015==es6 =>true


jquery 属性自加

a.css({'property':'+=value'})jquery


目前我对vue的感想

首先,说下优势确实有的,只操做数据不用操做domwebpack

再说下缺点,搞a要搞b搞b要搞c搞a要搞b搞b要搞c搞a要搞b搞b要搞c搞a要搞b搞b要搞c搞a要搞b搞b要搞c搞a要搞b搞b要搞c搞a要搞b搞b要搞c搞a要搞b搞b要搞c搞a要搞b搞b要搞c搞a要搞b搞b要搞c搞a要搞b搞b要搞c搞a要搞b搞b要搞c,最后搞得很难看懂。为了变方便变得更麻烦要加更多东西es6


contenteditable

div 模拟textarea 富文本编辑器web

<div class="simutextarea">
                    <span class="simut-fastenbegin">#youCantDeleteMe</span>
                    <span class="simut-textwrapper">
                        <span class="simut-textplaceholder">Hot or not? Tell it like it is and hashtag!</span>
                        <span class="simut-textplaceinput" contenteditable="true"> </span>
                    </span>
                </div>

可是有些问题的,解决不了光标的问题(跳首),百度贴吧的发帖框就是用这个模拟的,有时间看看他们怎么作的vue-cli


根据设备跳转

三方能够跳转,均可以得到浏览器传来的userAgent

  1. 运维跳转
  2. 程序跳转
  3. 前端跳转

同时,这三方加上网路运营商甚至路由器均可以恶意dns恶意在页面上加东西
node做为运行时服务器,也是同样的


图片位于正中

  1. background-position center
  2. position absolute

多行省略(现代浏览器)

overflow: hidden;text-overflow:ellipsis;
        display: -webkit-box;
        -webkit-box-orient:vertical;
        -webkit-line-clamp:2;

cdn页面真正动态内容

页面被cdn服务器缓存后,须要刷新缓存才能真正改变,那么真正须要勤奋改变的内容须要js来获取(好比当前登陆用户信息等等)

js 正则找出全部符合的匹配

var regEx=/js_quantity[a-z]+/g;regEx.exec('js_quantityabc js_quantityminus minus disabled');regEx.exec('js_quantityabc js_quantityminus minus disabled');regEx.exec('js_quantityabc js_quantityminus minus disabled')
[0];regEx.exec('js_quantityabc js_quantityminus minus disabled').index;

不断连续执行exec


async/await

demo(Script snippet #1)

//测试 async async async await
//先来的 返回一个promise 完成时调用resolve
var sleep=function(){
 return new Promise(function(resolve,reject){
     setTimeout(function(){
         console.log('Asettimeout has been executed, promiss has been resolved');
         resolve(['sleep1','sleep2']);
     },3000);
 });
};
//后到的 async(异步)修饰function await修饰执行先来的
var start=async function(){
 let sleepreturnarray=await sleep();
 console.log('%ceven though i do not have a time out, i still will be executed after 3 sec, after the promiss resolveed'+sleepreturnarray[1],'color:red;');
};
start();

async 表示这是一个async函数,await只能用在这个函数里面。

await 表示在这里等待promise返回结果了,再继续执行。

await 后面跟着的应该是一个promise对象(固然,其余返回值也不要紧,只是会当即执行,不过那样就没有意义了…)

大大说了,目前这这就是异步回调地狱的终极解决方案,固然要结合babel如今。注意, 目前, 终极


vue组件通信

就算你不喜欢,分到你用你也得用。。。

组件之间的做用域独立,而组件之间常常又须要传递数据。
A 为父组件,下面有子组件 B 和 C。
A 的数据能够经过 props 传递给 B 和 C。
A 能够经过 $broadcast 调用 B 和 C 的 events,从而操做 B 和 C 的数据。
B 和 C 能够经过 $dispatch 调用 A 的 events,从而操做 A 的数据。
当 B 须要操做 C 的数据就会比较麻烦,须要先 $dispatch 到 A,再 $broadcast 到 C。

若是项目比较小的话还好,越大的项目,涉及的组件通讯就越多、越频繁,此时管理起来就会很是累,并且容易出错。这就是 Vuex 的意义所在。它能够将数据置于单独的一层,并提供给外部操做内部数据的方法。粗俗一点,就这样理解吧。

=== === ===更新:Vue 2 发布了,去掉了 $dispatch 和 $broadcast,已经不会出现通讯事件 ping-pong 的状况了。

咱们须要有一个 Vue 实例来充当通讯媒介的做用,Vue 官方文档里将它叫作 event bus。export default new Vue(); 当咱们须要组件之间事件通讯的时候,只须要对这个 event bus 使用 $emit 和 $on 就能够了。

import Bus from './bus.js';

export default Vue.extend({
  template: `
  <div>{{msg}}</div>
  `,

  data: () => ({
    msg: 'Hello World!'
  }),

  created() {
    Bus.$on('setMsg', content => {
      this.msg = content;
    });
  }
});
import Bus from './bus.js';

export default Vue.extend({
  template: `
  <div @click="sendEvent">Say Hi</div>
  `,

  methods: {
    sendEvent() {
      Bus.$emit('setMsg', 'Hi Vue!');
    }
  }
});

Event bus 是一种实践,你也能够在 Vue 1.x 中使用它。


大在小容器中居中

法一

大:position absolute; left 50%;margin-left -[大宽度的一半]; top...跟left同样的省略

小:position relative;

法二

设置为背景图 且background-position center


文本框和按钮同高对齐(less)

form{
			font-size: 0;position: relative;
			.formitem{
				height: 30px;line-height: 30px;
				font-size: 14px;vertical-align: middle;
			}
			input[type=text]{
				.formitem();
				border: 1px solid #000;
				padding: 0 5px 0 35px;
				width: 235-40px;
			}
			button{
				.formitem();
				color: #fff;background-color: #000;
				width: 135px;height: 32px;line-height: 32px;
			}
			&:before{
				content: '';display: inline-block;position: absolute;
				left: 38px;
				top: 1px;
				.sprite(@youjiandingyue_07);
			}
		}

正则替换 保留原始内容

http://([A-Za-z0-9.-]+).sammydress.com
https://$1.sammydress.com

$1 是表明([A-Za-z0-9.-]+)匹配到的模糊内容
$1-$n分别表明第1个和第n个括号内匹配到的内容。

var regEx=/([A-Za-z0-9.-]+)abc/;
'sdjlfjslfabc'.replace(regEx,'$1def')

结果是"sdjlfjslfdef"


关于vue一点新的体会

专一于操做数据,数据和视图分离,经过操做数据的方式操做视图,mvvm
而不是$().html()等等这种形式


webstorm 保存不会触发webpack watch

https://segmentfault.com/q/1010000007796140?_ea=1459577
原来是这样啊啊啊啊啊啊


text align justify

text-align:justify 属性是全兼容的,使用它实现两端对齐,须要注意在模块之间添加[空格/换行符/制表符]才能起做用,一样,实现文本对齐也是须要在字与字之间添加[空格/换行符/制表符]才能起做用


vue validator

https://segmentfault.com/a/1190000006706226
中文文档


关于postcss中用于不转换rem的注释/*no*//*px*/在webpack build中不生效的解决办法

sass loader会把注释去掉 致使用于告诉postcss不用转换rem的注释也去掉 致使边线px变成小数rem 显示不出来的bug
sass?outputStyle=expanded 展开 带注释的?

module: {
        loaders: [
            {
                test: /\.scss$/,
                //感謝谷歌
                loader: 'style!css!postcss-loader!sass?outputStyle=expanded',
                // include: APP_PATH
            },
        ]
    },

webpack 能够接受形如!sass?outputStyle=expanded&sourceMap=true&sourceMapContents=true&includePaths[]=./node_modules 的配置参数后的loader

相关文章
相关标签/搜索