ag-grid在angularjs中的使用入门

ag-grid介绍

  • 号称世界上最好的HTML5表格
  • 支持绝大多数主流框架: 原生JavaScript/Angular/React/Vue/AngularJS/Polymer/Aurelia/Web Components
  • 社区版和商业版,主要功能开放为社区版,商业版支持增强特性
阅读更多

2018年前端开发技能全貌

现在是2018年,前端开发中层出不穷的框架和新技术,如何能入门前端开发?
这个专栏就是为了这个问题而产生的,把握住不变的要点,然后去适应这个变化的前端世界。

阅读更多

AngularJS 1.x平滑升级Angular实战(翻译)

本文翻译自Directly Upgrading From AngularJS 1.X To Angular Without Preparing The Existing Code Base

正文:

当我们从AngularJS 1.x升级到Angular(2/4/5)时,我们通常会先准备AngularJS 1.x的代码:

angularjs-upgrade-1

这个过程会引入像组件这类新的AngularJS 1.x技术。并且,引入TypeScript和像SystemJS或者Webpack之类的模块加载器是准备已有代码的进一步工作。这样做的目的是为了让代码更接近Angular便于更好的集成。

但是,在一些情况下,准备已有的代码成本很大。例如,试想一下这样的情形,当你不想修修改已有的AngularJS1.x的代码,并且想要写一些Angular的应用。当这样的情况在你的项目中发生,跳过准备阶段是一个好的主意。

angularjs-upgrade-2

这篇文章一步步展示如何完成这个过程。像官方的升级教程一样,包含准备代码的工作,这里也是升级流行的AngularJS 1.x 手机分类实例

即使这个实例覆盖了AngularJS 1.5中引入的组件,这里展示的对使用控制器(controller)和指令(directive)的代码也适用。

整个实例代码可以在Github 仓库中找到。为了接下来每一步更容易,我针对每一步做了一个代码提交。

阅读更多

JavaScript中对象的几种创建方式

记录JavaScript中创建对象的几种方法。

工厂模式

工厂模式是一种设计模式,抽象创建具体对象的过程,用函数来封装特定接口并创建对象的细节。

实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/* 工厂模式 */
function createPerson(name, age, job) {
var o = new Object();
o.name = name;
o.age = age;
o.job = job;
o.sayName = function() {
alert(this.name);
};
return o;
}

var person1 = createPerson("Nicholas", 29, "Software Engineer");
var person2 = createPerson("Greg", 27, "Doctor");

console.log(person1);
console.log(person2);

优点:
解决创建多个相似对象。

缺点:
没有解决对象识别的问题。

阅读更多

通过css实现锚点跳转后的位置调整

设计导航菜单的过程中,有时候会涉及到二级子菜单,外部的或者是内部页面页面的跳转,这个时候,锚点可能会派上场。

其中使用锚点进行页面的各部分内容跳转,有时候页面的导航栏是使用固定定位(fixed)的布局,可能会导致标题遮挡部分跳转后的内容,因此,需要对锚点调整后的位置进行偏移。

方法

通过使用css实现锚点跳转后的位置调整:

定义一个class:

1
2
3
4
.named-target {
padding-top: 50px;
margin-top: -50px;
}

将这个class赋给锚点或者锚点后的元素即可。

原理

字面上的原理可以理解为元素外边距向上移动了50像素,使用上内边距给抵消了。
内在的原理,我还没理解,待理解了再更新。

css弹性盒简介之一

css布局经历了使用table和float布局的过程,W3C推出了flexbox的布局方式。

Flexbox基础

flex container

使用div或者其他标签作为容器,用于放置其他子元素。

flex items

嵌套在容器中的直接元素自动转为flex item,子元素的子元素便不是flex item。

实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!-- html part -->
<div class="container">
<div>A flex item</div>
<div>Another flex item</div>
<div>A third flex item</div>
</div>

/* css part */
.container {
display: -webkit-flex;
display: flex;
}

.container div {
-webkit-flex: 1;
flex: 1;
}

i18next的jquery插件jquery-i18next的使用方法

前提条件

使用jquery-i18next插件前,需要jquery和i18next的支持。

安装

jquery-i18next支持npm和bower安装

1
2
3
4
5
# npm package
$ npm install jquery-i18next

# bower
$ bower install jquery-i18next

使用入门

在html代码中插入data-i18n的属性

1
2
3
4
5
<ul class="nav">
<li><a href="#" data-i18n="nav.home"></a></li>
<li><a href="#" data-i18n="nav.page1"></a></li>
<li><a href="#" data-i18n="nav.page2"></a></li>
</ul>

定义翻译文件

可在源码路径下创建locales/en/translation.json文件

1
2
3
4
5
6
7
{
"nav": {
"home": "Home",
"page1": "Page One",
"page2": "Page Two"
}
}

通过Javascript代码进行初始化和翻译

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 其中i18nextInstance是i18next的实例,最后一个参数是配置项

jqueryI18next.init(i18nextInstance, $, {
tName: 't', // --> appends $.t = i18next.t
i18nName: 'i18n', // --> appends $.i18n = i18next
handleName: 'localize', // --> appends $(selector).localize(opts);
selectorAttr: 'data-i18n', // selector for translating elements
targetAttr: 'i18n-target', // data-() attribute to grab target element to translate (if diffrent then itself)
optionsAttr: 'i18n-options', // data-() attribute that contains options, will load/set if useOptionsAttr = true
useOptionsAttr: false, // see optionsAttr
parseDefaultValueFromContent: true // parses default values from content ele.val or ele.text
});

$(".nav").localize();

最终展现在网页中的结果

1
2
3
4
5
// <ul class="nav">
// <li><a href="#" data-i18n="nav.home">Home</a></li>
// <li><a href="#" data-i18n="nav.page1">Page One</a></li>
// <li><a href="#" data-i18n="nav.page2">Page Two</a></li>
// </ul>

使用进阶

通过jQuery的选择器来实现不同的翻译

翻译一个元素

1
2
<a id="btn1" href="#" data-i18n="myKey"></a>
$("#btn1").localize(options);

翻译一个元素的子元素

1
2
3
4
5
6
<ul class="nav">
<li><a href="#" data-i18n="nav.home"></a></li>
<li><a href="#" data-i18n="nav.page1"></a></li>
<li><a href="#" data-i18n="nav.page2"></a></li>
</ul>
$(".nav").localize();

翻译一些内部元素

1
2
3
4
<div class="outer" data-i18n="ns:key" data-i18n-target=".inner">
<input class="inner" type="text"></input>
</div>
$(".outer").localize();

设置不同属性的翻译

比如,想要设置某个元素的title属性的多语言,可使用这种方式;或者其他提示信息等。

1
2
<a id="btn1" href="#" data-i18n="[title]key.for.title"></a>
$("#btn1").localize();

设置多个属性

和设置单个属性类似,不过通过分号进行分隔,添加多个属性。

1
2
<a id="btn1" href="#" data-i18n="[title]key.for.title;myNamespace:key.for.text"></a>
$("#btn1").localize();

设置内部html的属性

1
2
<a id="btn1" href="#" data-i18n="[html]key.for.title"></a>
$("#btn1").localize();

添加前置内容

给一个元素原有内容前插入一些翻译文字

1
2
<a id="btn1" href="#" data-i18n="[prepend]key.for.title">insert before me, please!</a>
$("#btn1").localize();

添加后置内容

给一个元素原有内容后追加一些翻译文字

1
2
<a id="btn1" href="#" data-i18n="[append]key.for.title">append after me, please!</a>
$("#btn1").localize();

设置数据

1
2
<a id="btn1" href="#" data-i18n="[data-someDataAttribute]key.for.content"></a>
$("#btn1").localize();

参考

disable超链接的css样式

想要设置disabled的超链接,让用户不可点击,可添加一个class来设置。

1
2
3
4
5
6
7
.disabled-link {
pointer-events: none;
cursor: default;
opacity: 0.6;
}

<a href="#" class="disabled-link">link</a>

注意:
pointer-events这个属性对浏览器兼容性有一定的要求。

IE11
Edge 14
Firefox 51
Chrome 49
Safari 10
Opera 43

【以上】

自定义li的css样式

li的默认样式有几种,我们想要自定义li的样式,例如定义颜色或者显示的图标,以下是操作的两种方法。

方法一:

修改的原理,取消list默认的style,并通过伪元素before来设置新的样式。

1
2
3
4
5
6
7
ul {list-style: none}

li::before {
content: "•"; color: red;
display: inline-block; width: 1em;
margin-left: -1em
}

特殊符号的一些输入可使用Unicode编码:• = “\2022”, ◦ = \25E6” and ▪ = “\25AA”

方法二:

修改的原理,通过自定义的class来区分标点和文字的颜色。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
.listStyle {
color: red;
}

.listStyle p {
color: black;
}

<ul class="listStyle">
<li>
<p><strong>View :</strong> blah blah.</p>
</li>
<li>
<p><strong>View :</strong> blah blah.</p>
</li>
</ul>

参考: