Double Brace Initialization
双括号初始化,创建一个从指定类(外部大括号)派生的匿名类,并在该类(内部大括号)中提供初始化块。
每次使用双括号初始化时,都会生成一个新类,创建的类具有指向周围外部类的隐式this指针。
一个人,一根烧火棍,面对整个世界.
Lambda表达式避免了采用策略设计模式时僵化的模板代码。1
2
3
4
5
6Validator numericValidator =
new Validator((String s) -> s.matches("[a-z]+"));
boolean b1 = numericValidator.validate("aaaa");
Validator lowerCaseValidator =
new Validator((String s) -> s.matches("\\d+"));
boolean b2 = lowerCaseValidator.validate("bbbb");
模板语法来声明式地将数据渲染进 DOM 的系统1
2
3
4
5
6
7
8
9
10<div id="app">
{{ message }}
</div>
<!--more-->
var app = new Vue({
el: '#app',
data: {
message: 'Hello Vue!'
}
})
v-bind attribute 被称为指令,绑定元素 attribute。1
2
3
4
5
6
7
8
9
10
11<div id="app-2">
<span v-bind:title="message">
鼠标悬停几秒钟查看此处动态绑定的提示信息!
</span>
</div>
var app2 = new Vue({
el: '#app-2',
data: {
message: '页面加载于 ' + new Date().toLocaleString()
}
})
控制切换一个元素是否显示1
2
3
4
5
6
7
8
9<div id="app-3">
<p v-if="seen">现在你看到我了</p>
</div>
var app3 = new Vue({
el: '#app-3',
data: {
seen: true
}
})
v-for 指令可以绑定数组的数据来渲染一个项目列表1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17<div id="app-4">
<ol>
<li v-for="todo in todos">
{{ todo.text }}
</li>
</ol>
</div>
var app4 = new Vue({
el: '#app-4',
data: {
todos: [
{ text: '学习 JavaScript' },
{ text: '学习 Vue' },
{ text: '整个牛项目' }
]
}
})
1 | <div id="app-5"> |
v-model 指令,它能轻松实现表单输入和应用状态之间的双向绑定。1
2
3
4
5
6
7
8
9
10<div id="app-6">
<p>{{ message }}</p>
<input v-model="message">
</div>
var app6 = new Vue({
el: '#app-6',
data: {
message: 'Hello Vue!'
}
})
1 | <div id="app-7"> |
1 | var data = { a: 1 } |
1 | new Vue({ |
也有一些其它的钩子,在实例生命周期的不同阶段被调用,如 mounted、updated 和 destroyed。生命周期钩子的 this 上下文指向调用它的 Vue 实例。
1 | <span>Message: {{ msg }}</span> |
无论何时,绑定的数据对象上 msg property 发生了改变,插值处的内容都会更新。
通过使用 v-once 指令,你也能执行一次性地插值,当数据改变时,插值处的内容不会更新。
双大括号会将数据解释为普通文本,而非 HTML 代码。为了输出真正的 HTML,你需要使用 v-html1
<p>Using v-html directive: <span v-html="rawHtml"></span></p>
HTML attribute使用 v-bind 指令1
2<div v-bind:id="dynamicId"></div>
<button v-bind:disabled="isButtonDisabled">Button</button>
指令是带有 v- 前缀的特殊 attribute,职责是当表达式的值改变时,将其产生的连带影响,响应式地作用于 DOM。1
<p v-if="seen">现在你看到我了</p>
参数,在指令名称之后以冒号表示。1
2<a v-bind:href="url">...</a>
<a v-on:click="doSomething">...</a>
href 是参数,告知 v-bind 指令将该元素的 href attribute 与表达式 url 的值绑定。
1 | <a v-bind:[attributeName]="url"> ... </a> |
attributeName 会被作为一个 JavaScript 表达式进行动态求值,求得的值将会作为最终的参数来使用。例如,如果你的 Vue 实例有一个 data property attributeName,其值为 “href”,那么这个绑定将等价于 v-bind:href。
v- 前缀作为一种视觉提示,用来识别模板中 Vue 特定的 attribute。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17<!-- 完整语法 -->
<a v-bind:href="url">...</a>
<!-- 缩写 -->
<a :href="url">...</a>
<!-- 动态参数的缩写 (2.6.0+) -->
<a :[key]="url"> ... </a>
<!-- 完整语法 -->
<a v-on:click="doSomething">...</a>
<!-- 缩写 -->
<a @click="doSomething">...</a>
<!-- 动态参数的缩写 (2.6.0+) -->
<a @[event]="doSomething"> ... </a>
1 | <div id="example"> |
计算属性是基于它们的响应式依赖进行缓存的。只在相关响应式依赖发生改变时它们才会重新求值。这就意味着只要 message 还没有发生改变,多次访问 reversedMessage 计算属性会立即返回之前的计算结果,而不必再次执行函数。
1 | data: { |
v-model指令在表单 、
v-model 会忽略所有表单元素的 value、checked、selected attribute 的初始值而总是将 Vue 实例的数据作为数据来源。应该通过 JavaScript 在组件的 data 选项中声明初始值。1
2<input v-model="message" placeholder="edit me">
<p>Message is: {{ message }}</p>
对于单选按钮,复选框及选择框的选项,v-model 绑定的值通常是静态字符串,对于复选框也可以是布尔值。
把值绑定到 Vue 实例的一个动态 property 上,这时可以用 v-bind 实现,并且这个 property 的值可以不是字符串。
1 | <input type="radio" v-model="pick" v-bind:value="a"> |
v-model 在每次 input 事件触发后将输入框的值与数据进行同步 (除了上述输入法组合文字时)。可以添加 lazy 修饰符,从而转为在 change 事件_之后_进行同步。1
2<!-- 在“change”时而非“input”时更新 -->
<input v-model.lazy="msg">
如果想自动将用户的输入值转为数值类型,可以给 v-model 添加 number 修饰符:1
<input v-model.number="age" type="number">
这通常很有用,因为即使在 type=”number” 时,HTML 输入元素的值也总会返回字符串。如果这个值无法被 parseFloat() 解析,则会返回原始的值。
如果要自动过滤用户输入的首尾空白字符,可以给 v-model 添加 trim 修饰符:1
<input v-model.trim="msg">
java.lang.Runnable吧,它是一个接口,在它里面只声明了一个run()方法,由于run()方法返回值为void类型,所以在执行完任务之后无法返回任何结果。
Callable位于java.util.concurrent包下,它也是一个接口,在它里面也只声明了一个方法,只不过这个方法叫做call(),这是一个泛型接口,call()函数返回的类型就是传递进来的V类型。
1 | <artifactId>archetype-all</artifactId> |
GraphQL是一种用于API或数据的查询语言。
RandomAccessFile提供了对文件的读写功能。RandomAccessFile 虽然属于java.io下的类,但它不是InputStream或者OutputStream的子类;它也不同于FileInputStream和FileOutputStream。
FileInputStream 只能对文件进行读操作,而FileOutputStream 只能对文件进行写操作;但是,RandomAccessFile 与输入流和输出流不同之处就是RandomAccessFile可以访问文件的任意地方同时支持文件的读和写,并且它支持随机访问。