养老金与比特币

pension.jpg

中国养老金精算报告2019-2050

上次看完大伟的文章也去关注了下养老金。上图来自《中国养老金精算报告2019-2050》,显示出将在2037年养老金开始出现亏空,也就是说这意味着大部分老人将可能领不到养老金了!

这也许是任何一个老龄化国家都将面临的困境。当老年人多于年轻人、张嘴吃饭的人多于干活的人时,有些人就要开始饿肚子了。

谁都不希望老无所依!但现实会超出预料地残酷。不管我们多不愿意,现在交的养老金很可能都是打了水漂。就算到时能领,以现在的通胀水平,你能领的养老金估计也就只能买几个鸡蛋吧。

一交钱就超出了你的掌控,这也许才是很多人感到无力的地方吧。你交的养老金都不知道去了哪里,也不知用于干什么!而等你老了时,估计也是领不回这些钱了吧?!我们只能寄希望于国家还能管管我们。

如果养老金都在,甚至还能增点值,这岂不是快哉?比特币会是一个解决方案吗?

能想到这个方法的聪明人不在少数,已经有人在做了。

美国弗吉尼亚州(Fairfax)的两只养老基金——费尔法克斯县警察退休系统和费尔法克斯县雇主养老金计划,成为数字资产管理公司Morgan Creek Digital旗下新的数字货币基金的投资者。彭博报道称,这是美国养老基金首次投资数字货币领域。

Morgan Creek Digital的上述基金规模超过4000万美元。该公司创始人Pompliano称,基金最初计划融资2500万美元,但由于投资者的兴趣,其上限几乎翻了一番,达到4000万美元。这笔融资将对区块链和数字资产企业进行股权投资,也将持有一小部分的流动性加密货币,如比特币。

他还透露,该基金主要投资一些数字货币巨头,包括巴克特(Bakkt)、星巴克(Starbucks)和纽约证券交易所(Intercontinental Exchange)共同拥有的加密货币交易所Coinbase和其他的区块链和加密货币初创公司。

我不想再多说比特币了。至少比特币还会在我手上,其它的真是不太靠谱。


This page is synchronized from the post: 养老金与比特币

webpack前端神器 / 网络研习社#16

webpack.jpg

https://webpack.js.org

但凡能称为神器的,都是有两把刷子的。vue是js的前端框架,要设计一个完整的网页,它要安装大量的依赖,就像我前面几篇所介绍的,要安装vue-router, vue-loader, vue-resource等等,还要配置各项设置。当我一边啃书本,一边看教学视频时,也不由一阵头大:这到底是啥神器嘛,咋要这么多配置啊,这不整死人嘛!

可当我动手实践时,才发现,这些其实都是些基础知识,你完全可以不用理会,这些webpack在第一次创建时都会帮你配置,你只要开始你的核心业务就好啦!

webpack五分钟安装版:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#前提是你已经安装了node.js。
1. npm install -g cnpm --registry=https://registry.npm.taobao.org
//注册为国内淘宝镜像,使用cnpm代替npm,这会加快你的安装速度!
2. cnpm install --global vue
//全局安装
3. cnpm install --global vue-cli
4. cnpm install webpack –g
//全局安装
5. vue init webpack webpackdemo
//初始化一个项目webpackdemo
//在选项中取消最后一项默认的 npm install ,我们用 cnpm install
6. cd webpackdemo
7. cnpm install
8. cnpm run dev

到此,就可以愉快地运行了!如果不是实践一下,还在看着过期的教程和方法,有时候软件更新太快也是一个麻烦事啊。

webpack2.jpg

初始化的项目结构

以上是初始化的项目结构,你不用写一行代码,你的服务就可以运行起来,确实可以当得起神器之名!


网络研习社系列文章:


 @lemooljiang #network-institute


This page is synchronized from the post: webpack前端神器 / 网络研习社#16

vue-router路由的参数和设计 / 网络研习社#15

到了路由功能了。路由分前端路由和后端路由,这里先来看前端。vue有个好用的插件vue-router来解决路由的麻烦,它与组件配合就能很好地组织网页了。

vue-router基本使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<script src="./lib/vue-router.js"></script>  //先是引包

<div id="app">
<router-link to="/login">login</router-link>
<router-link to="/register">register</router-link>
<router-view></router-view>
</div>

<script>
var login = {
template: '<h1>login组件</h1>'
}
var register = {
template: '<h1>register组件</h1>'
}
var router = new VueRouter({
routes: [
{path: '/', redirect: '/login'},
{path: '/login', component: login} , //必须是模板对象,不能是组件名称
{path: '/register', component: register}
]
})
var app = new Vue({
el: '#app',
router
})
</script>

vue-router切换时的当前路径的高亮显示:

1
2
3
4
5
<style>
.router-link-active{
color:red;
}
</style>

vue-router路由传参:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
1、$route.query
<router-link to="/login?id=10">login</router-link>

var login = {
template: '<h1>login组件---{{ $route.query.id }}</h1>',
created () {
console.log(this.$route.query.id)
}
}

2、$route.params
<router-link to="/login/10">login</router-link>

var login = {
template: '<h1>login组件---{{ $route.params.id }}</h1>',
created () {
console.log(this.$route.params.id)
}
}

var routerObj = new VueRouter({
routes: [
{path: '/login/:id', component: login} ,
{path: '/register', component: register}
]
})

子路由(路由嵌套)的设计

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<div id="app">
<router-link to="/login">login</router-link>
<router-link to="/register">register</router-link>
<router-view></router-view>
</div>

<template id="tmp">
<div>
<router-link to="/register/weibo">微博注册</router-link>
<router-link to="/register/phone">手机注册</router-link>
<router-view></router-view>
</div>
</template>

var login = {
template: '<h1>login组件</h1>'
}
var weibo = {
template: '<h1>weibo组件</h1>'
}
var phone = {
template: '<h1>phone组件</h1>'
}
var register = {
template: '#tmp'
}

var router = new VueRouter({
routes: [
{path: '/', redirect: '/login'},
{path: '/login', component: login} ,
{path: '/register', component: register,
children: [
{path: 'weibo',component: weibo},
{path: 'phone',component: phone}
]
}
]
})

命名视图布局(name指定组件名),多个组件布置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<div id="app">
<router-view></router-view>
<router-view name="left"></router-view>
<router-view name="main"></router-view>
</div>

var header= {
template: '<h1>header组件</h1>'
}
var left = {
template: '<h1>left组件</h1>'
}
var main = {
template: '<h1>main组件</h1>'
}

var router = new VueRouter({
routes: [
{path: '/', components: {
default: header,
left: left,
main: main
}}
]
})

网络研习社系列文章:


 @lemooljiang #network-institute


This page is synchronized from the post: vue-router路由的参数和设计 / 网络研习社#15

vue的组件面面观 / 网络研习社#14

和小程序一样,有个组件概念的出现。它的使用,就是为了拆分Vue实例的代码量的,能够让我们以不同的组件,来划分不同的功能模块,将来我们需要什么样的功能,就可以去调用对应的组件即可,简直不要太方便!

全局组件component定义的三种方式 :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
第一种方法
1var con = Vue.extend({
template: '<span> hello world</span>'
})
2、Vue.component('name', 模板对象)
Vue.component('mycon',con)
3、<div><mycon></mycon></div>
可以简写为:
1、Vue.component('mycon',Vue.extend({
template: '<span> hello world</span>'
}))
2、<div><mycon></mycon></div>

第二种方法
1、Vue.component('mycon', {
template: '<span> hello world</span>'
})
2、<div><mycon></mycon></div>

第三种方法
全局组件
1、Vue.component('mycon', {
template: '#tmp'
})
2、<template id="tmp">
<div>hello world</div>
</template>
3、<div><mycon></mycon></div>


私有组件

1
2
3
4
5
6
7
<div><mycon></mycon></div>
定义私有方法components:
components:{
mycon: {
template: '<span> hello world</span>'
}
}


组件中的data,必须是函数,return出去:

1
2
3
4
5
6
Vue.component('mycon', {
template: '#tmp',
data: function () {
return {msg: '组件中的数据'}
}
})


组件切换:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<div id="app">
<a href="" @click.prevent="name='mycon1'">mycon1</a>
<a href="" @click.prevent="name='mycon2'">mycon2</a>
<component :is="name"></component>
</div>

Vue.component('mycon1', {
template: '#tmp1'
})
Vue.component('mycon2', {
template: '#tmp2'
})

var app = new Vue({
el: '#app',
data: {
name: 'mycon1'
}

})


父组件向子组件传值–props[]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<div id="app">
<mycon :parentmsg='msg'></mycon>
</div>

<template id="tmp">
<div>
<h1>我是一个组件---{{ parentmsg}}</h1>
</div>

</template>

<script>
var app = new Vue({
el: '#app',
data: {
msg: '父组件中的数据'
},
components: {
mycon : {
template: '#tmp',
props: ['parentmsg']
}
}

})
</script>


父组件向子组件传递方法,子组件向父组件传值–$emit()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<div id="app">
<mycon @func='show'></mycon>
</div>

<template id="tmp">
<div>
<input type="button" value="调用" @click="myclick">
</div>
</template>

<script>
var app = new Vue({
el: '#app',
data: { },
methods: {
show: function (data) {
console.log('父组件中的方法' + data) //可以通过这种方法,子组件向父组件传值
}
},
components: {
mycon : {
template: '#tmp',
methods: {
myclick: function () {
this.$emit('func', 123)
}
}
}
}

})
</script>



网络研习社系列文章:


 @lemooljiang #network-institute


This page is synchronized from the post: vue的组件面面观 / 网络研习社#14

vue和小程序一家亲 / 网络研习社#13

vue mini.jpg

越到后面,越发现vue和小程序在设计时的惊人相似。这种相似性体现在设计理念上,在运行的环境上,在传递值的手法上,这种相似的程度类似于美国人和中国人的相似。

当然,我们无从得知,无论到底是谁参考了谁,还是最终是英雄所见略同、殊途同归,这种相似性的设计在后期学习上确实可以给我们以参考。这也意味着:如果你会vue的设计,那么小程序的设计你也会很快上手,反之亦然。

我们可以从两者的生命周期来加以分析参考。

lifecycle.png

vue的生命周期图表

vue实例的生命周期

  • 什么是生命周期:从Vue实例创建、运行、到销毁期间,总是伴随着各种各样的事件,这些事件,统称为生命周期!
  • 生命周期钩子:就是生命周期事件的别名而已;
  • 生命周期钩子 = 生命周期函数 = 生命周期事件
  • 主要的生命周期函数分类:
    • 创建期间的生命周期函数:
      • beforeCreate:实例刚在内存中被创建出来,此时,还没有初始化好 data 和 methods 属性
      • created:实例已经在内存中创建OK,此时 data 和 methods 已经创建OK,此时还没有开始 编译模板
      • beforeMount:此时已经完成了模板的编译,但是还没有挂载到页面中
      • mounted:此时,已经将编译好的模板,挂载到了页面指定的容器中显示
    • 运行期间的生命周期函数:
      • beforeUpdate:状态更新之前执行此函数, 此时 data 中的状态值是最新的,但是界面上显示的 数据还是旧的,因为此时还没有开始重新渲染DOM节点
      • updated:实例更新完毕之后调用此函数,此时 data 中的状态值 和 界面上显示的数据,都已经完成了更新,界面已经被重新渲染好了!
    • 销毁期间的生命周期函数:
      • beforeDestroy:实例销毁之前调用。在这一步,实例仍然完全可用。
      • destroyed:Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。

page-lifecycle.png

小程序的生命周期图表

小程序的生命周期

1
2
3
4
5
6
7
8
9
10
11
onLoad: 页面加载
一个页面只会调用一次,可以在 onLoad 中获取打开当前页面所调用的 query 参数。
onShow: 页面显示
每次打开页面都会调用一次。
onReady: 页面初次渲染完成
一个页面只会调用一次,代表页面已经准备妥当,可以和视图层进行交互。
对界面的设置如wx.setNavigationBarTitle请在onReady之后设置。详见生命周期
onHide: 页面隐藏
当navigateTo或底部tab切换时调用。
onUnload: 页面卸载
当redirectTo或navigateBack的时候调用。



我们可以看到,有类似的函数来控制相应页面的生成和销毁,连调用的函数和方法都是类似的。不同的只是名字而已。所以基于此,这种基于vue + nodejs 的设计模式还是蛮流行的。有句话好像是:所有可以用js来解决的,最终都会用js来解决!


网络研习社系列文章:


 @lemooljiang #network-institute


This page is synchronized from the post: vue和小程序一家亲 / 网络研习社#13

我们想做的,vue都帮我们做好了 / 网络研习社#12

vue是一个相当火的前端,在前一篇中简略地体验了一下。它可以帮你做很多事情,清晰地规划日常事务。天天纠结于学哪种前端的朋友现在可以有一个简单的答案,那就是vue.js。

vue还可以和Django restframework来进行前后端分离的设计。这是我在做小程序时遇到的问题,现在倒是有了解决的办法。不过学习新方法确实也蛮头大的,快半月了,还只是一点点进展。这里做点小笔记,慢慢折腾。

常用表达式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
1、v-cloak 解决插值表达式的闪烁问题
<p v-cloak>{{ msg }}</p>
2、<p v-text='msg'></p> / 渲染文本内容
3、<p v-html='msg2'></p> / 渲染html内容
4、v-bind:title='mytitle' /绑定变量属性
语法简写形式:v-bind:title -> :title='mytitle'
5、v-on:click='show' /绑定事件
需要定义methods:{
show: function () {
alert(‘hello world’)
}
}
语法简写:v-on:click -> @click

v-model,双向数据绑定(与表单结合):
v-model=’msg’
msg:’hello world

v-for
遍历数组:<p v-for=’item in list’>{{item}}</p>
遍历对象:<p v-for= ‘(val, key) in user’>{{val}}—{{key}}</p>

v-if ,v-show:
<p v-if=’true’>显示出来</p>
v-if每次会重新生成和删除元素
<p v-show=’true’>显示出来</p>
v-show只是隐藏显示

事件修饰符:

1
2
3
4
5
.stop @click.stop=’show’   /可以阻止事件冒泡
.prevent /阻止默认行为
.capture /捕获触发事件
.self /只有点击当前元素才触发
.once /只触发一次

计算属性

1
2
3
4
5
6
所有的计算属性都是以函数的形式写在Vue实例内的computed选项内,最终返回计算后的结果。
computed:{
show: function () {
return show = true;
}
}

过滤器:

1
2
Vue.filter(‘filtername’,function(data){}) 
{{ data | filtername}}

按键修饰符:

1
2
3
@keyup.enter=’function’
.enter
.tab

网络研习社系列文章:


 @lemooljiang #network-institute


This page is synchronized from the post: 我们想做的,vue都帮我们做好了 / 网络研习社#12

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×