toggleClass() 了解一下toggleClass切換樣式文檔
vue把代理了你的數(shù)據(jù),所以才看到的是那樣子,數(shù)據(jù)還是原來(lái)的數(shù)據(jù),沒(méi)什么區(qū)別的。就是現(xiàn)在變成了響應(yīng)式數(shù)據(jù)
https://open-doc.dingtalk.com/
看官方api,如果沒(méi)有就是沒(méi)有。不要妄想有,我反正沒(méi)看見(jiàn)
on-success是文件上傳成功時(shí)的鉤子,你可以在這個(gè)鉤子中獲取到后端的返回?cái)?shù)據(jù)哇
...
:on-success="handleAvatarSuccess"
...
methods: {
handleAvatarSuccess(response, file, fileList) {
//response這個(gè)
}
}建議使用Path類(lèi)操作文件,涉及文件監(jiān)聽(tīng)事件、文件權(quán)限等高級(jí)特性
下面是隨便在博客上找的,東西比較雜,還需要你自己看API
package filespaths;
import org.junit.Test;
import java.io.*;
import java.net.URI;
import java.nio.charset.StandardCharsets;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.PosixFilePermission;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Stream;
/**
* @Author kingboy
* @Date 2017/4/13 11:05
* @Description Path is used to Path Sample
* @email kingboyworld@163.com
*/
public class PathTest {
private static String separator = File.separator;
/**
* 構(gòu)建Path
*/
@Test
public void constructon(){
//1.Paths
Path path = Paths.get("/Users/kingboy/Desktop/");
Path path1 = Paths.get(URI.create("/Users/kingboy/Desktop/"));
//2.FileSystems
Path path2 = FileSystems.getDefault().getPath("/Users/kingboy/Desktop/");
//3.File
Path path3 = new File("/Users/kingboy/Desktop/").toPath();
}
/**
* 創(chuàng)建一個(gè)空文件/文件夾
* @throws IOException
*/
@Test
public void create() throws IOException {
//文件夾
Path path = Paths.get("/Users/kingboy/Desktop/hello");
if(!Files.exists(path)){
Files.createDirectory(path);
//創(chuàng)建多個(gè)目錄
//Files.createDirectories(path);
}
//文件
Path path1 = Paths.get("/Users/kingboy/Desktop/helloFile");
if(Files.exists(path1)){
Files.createFile(path1);
}
}
/**
* 文件屬性
*/
@Test
public void getFileProperties() throws IOException {
Path path = Paths.get("/Users/kingboy/Desktop/text.txt");
System.out.println(Files.getLastModifiedTime(path));//最后修改時(shí)間
System.out.println(Files.getOwner(path));//擁有者
System.out.println(Files.getPosixFilePermissions(path));//權(quán)限
System.out.println(Files.size(path));//文件大小
}
/**
* 讀取一個(gè)文本文件
*/
@Test
public void readText() throws IOException {
Path path = Paths.get("/Users/kingboy/Desktop/text.txt");
//通過(guò)bufferedReader讀取
BufferedReader bufferedReader = Files.newBufferedReader(path, StandardCharsets.UTF_8);//文件編碼
StringBuilder sb = new StringBuilder();
String tempString = null;
while ((tempString = bufferedReader.readLine())!=null){
sb = sb.append(tempString);
}
System.out.println(sb);
//通過(guò)Files方法readAllLines
List<String> strings = Files.readAllLines(path);
strings.forEach(s -> System.out.print(s));
//輸出結(jié)果
//adsfasdfasdfadsfasdfgsdfsdffsdfsdf
//adsfasdfasdfadsfasdfgsdfsdffsdfsdf
}
/**
* 拿到文件輸入流
* @throws IOException
*/
@Test
public void getInputStream() throws IOException {
Path path = Paths.get("/Users/kingboy/Desktop/text.txt");
InputStream inputStream = Files.newInputStream(path);
}
/**
* 文件寫(xiě)操作
*/
@Test
public void writeFile() throws IOException {
Path path = Paths.get("/Users/kingboy/Desktop/writeFile");
BufferedWriter bufferedWriter = Files.newBufferedWriter(path);
String str = "write file test";
bufferedWriter.write(str);
bufferedWriter.flush();
bufferedWriter.close();
}
/**
* 遍歷一個(gè)文件夾
*/
@Test
public void traverseDirectory() throws IOException {
Path path = Paths.get("/Users/kingboy/Desktop/");
Stream<Path> list = Files.list(path);
list.forEach(p -> {
System.out.println(p.getFileName());
});
}
/**
* 遍歷文件樹(shù)
*/
@Test
public void traverseTree() throws IOException {
Path path = Paths.get("/Users/kingboy/Desktop/");
Stream<Path> walk = Files.walk(path);
walk.forEach(path1 -> {
// System.out.println(path1.getRoot());//根目錄
System.out.println(path1.getFileName());//文件名
// System.out.println(path1.getParent());//上級(jí)目錄
// System.out.println(path1.getFileSystem());//文件系統(tǒng)
});
//還有種方式Files.walkFileTree()
}
/**
* 文件復(fù)制
*/
@Test
public void copyFile() throws IOException {
Path path = Paths.get("/Users/kingboy/Desktop/text.txt");
Path path2 = Paths.get("/Users/kingboy/Desktop/hello.txt");
Files.copy(path,path2);
}
/**
* 讀取權(quán)限見(jiàn)上面示例,設(shè)置權(quán)限
*/
@Test
public void writePermission() throws IOException {
Path path = Paths.get("/Users/kingboy/Desktop/text.txt");
Set<PosixFilePermission> permissionSet = new HashSet<>();
permissionSet.add(PosixFilePermission.GROUP_WRITE);
permissionSet.add(PosixFilePermission.OWNER_EXECUTE);
Files.setPosixFilePermissions(path,permissionSet);
}
//還有很多其他操作Api,自己查看方法名,很容易就能分辨出功能。
}最快捷的辦法,看響應(yīng)頭,若包含 x-cache, via, x-via等字段,基本都是用了cdn加速。
因你沒(méi)有說(shuō)明 x-real-ip 是哪層協(xié)議的字段/內(nèi)容,這里假設(shè)它是 HTTP 協(xié)議的頭部。
要過(guò)濾自定義的 HTTP 頭部字段,需要在 wireshark 菜單
編輯 -> 首選項(xiàng) -> 協(xié)議 -> HTTP
中添加自定義字段
x-real-ip
然后重啟 wireshark,在過(guò)濾框中輸入 http.header.x-real-ip 便可過(guò)濾出所有帶 x-real-ip 字段的 HTTP 請(qǐng)求。
大概意思是這樣:在打印數(shù)組或是對(duì)象的時(shí)候是通過(guò)引用去取的值,當(dāng)你改變數(shù)組時(shí),打印出來(lái)的值自然也就變了
看起來(lái)像是網(wǎng)絡(luò)原因啊,
要是確定配置沒(méi)錯(cuò),就耐心等等,或者換一個(gè)好點(diǎn)的網(wǎng)絡(luò)
或者清空一下hexo的緩存文件,重來(lái)一遍試試
使用工具 xrandr 可以指定任意一種(顯示器支持的)分辨率,也可以設(shè)置縮放比例,還可以設(shè)置多屏幕協(xié)作模式。
例如,列舉所有顯示設(shè)備的參數(shù) xrandr -q
HDMI-N connected 1024x768+0+0 (...) ...
...
1024x768 ...
...
例如,設(shè)置輸出設(shè)備 DP-1,及縮放比例 1.5 xrandr --output DP-1 --scale 1.5x1.5
假設(shè)list 是 后臺(tái)傳過(guò)來(lái)的數(shù)據(jù)
const list = [
{ id: 1, name: '郭德鋼' },
{ id: 2, name: '周杰輪' },
{ id: 3, name: '人生海海' },
]
<Steps progressDot current={1}>
{
list.map((item) => {
return (
<Step key={item.id} title={item.name} description={item.name} />
)
})
}
</Steps>
很簡(jiǎn)單
好巧啊,我剛好在寫(xiě) Vue源碼閱讀 - 批量異步更新與nextTick原理 的文章,剛好涉及了這一塊的內(nèi)容~
這個(gè)情況在vue的源碼中尤雨溪也注釋出來(lái)了,你可以點(diǎn)進(jìn)去看看,所以在2.5之后的版本更改了這個(gè)情況,我這里就翻譯一下:
在2.4之前的版本中,nextTick基本上基于microtask來(lái)實(shí)現(xiàn)的,但是在某些情況下microtask具有太高的優(yōu)先級(jí)
,并且可能在連續(xù)順序事件(例如#4521,#6690)之間或者甚至在同一事件的事件冒泡過(guò)程中(#6566)之間觸發(fā)。
但是如果全部都改成macrotask,對(duì)一些有重繪和動(dòng)畫(huà)的場(chǎng)景也會(huì)有性能影響,如 issue #6813。
這里提供的解決辦法是默認(rèn)使用microtask,但在需要時(shí)(例如在v-on附加的事件處理程序中)強(qiáng)制使用macrotask
所以2.4之前不會(huì)顯示是因?yàn)橹笆褂胢icrotask來(lái)實(shí)現(xiàn)的dom事件,它在當(dāng)前tick的macro task執(zhí)行完之后 patch 之前執(zhí)行,所以我猜測(cè)是因?yàn)?micro task 高優(yōu)先級(jí)的原因沒(méi)等當(dāng)前tick的變動(dòng) patch 渲染到真實(shí)dom上就已經(jīng)更改了數(shù)據(jù),因此當(dāng)然不會(huì)渲染到真實(shí)DOM上了。
而2.5之后的nextTick使用macrotask,是肯定在下個(gè)tick之后執(zhí)行的回調(diào),所以在這個(gè)回調(diào)執(zhí)行之前input進(jìn)去的內(nèi)容自然會(huì)被渲染到真實(shí)dom上,所以你看到的就是一閃而過(guò)了~
不是有active嘛https://youzan.github.io/vant...
他應(yīng)該是根據(jù)van-tab順序的index來(lái)判斷對(duì)應(yīng)的active的 兩種方法嘛 一個(gè)動(dòng)態(tài)的根據(jù)v-for顯示你要顯示的內(nèi)容 第二種就是多寫(xiě)幾個(gè)van-tab 反正他的內(nèi)容是根據(jù)slot來(lái)的
<van-tabs v-model="active">
<van-tab :title="...">內(nèi)容1</...>
<van-tab :title="...">內(nèi)容2</...>
<van-tab :title="...">內(nèi)容3</...>
</...>正則改成/\d+/g/\d*/g可以匹配0個(gè)數(shù)字,所以就不會(huì)停止,死循環(huán)了
MDN 正則表達(dá)式
正則表達(dá)式用于匹配符合一定模式的字符串。*表示匹配前一個(gè)表達(dá)式0次或多次。
所以/c/g.test("a string")表示字符串"a string"是否有一個(gè)c,而/c*/g.test("a string")表示字符串"a string"是否至少有0個(gè)c。顯然至少有0個(gè)是絕對(duì)絕對(duì)會(huì)成立的。所以/c*/g.exec("a string")在一開(kāi)始就會(huì)匹配成功(因?yàn)槟阈枰辽?個(gè),就算我開(kāi)頭是a,我返回給你0個(gè)c`也就是空字符串也符合你要求,如果你用while來(lái)循環(huán),我就一直給你空字符串)。
正則用于匹配符合一定模式的字符串。
比如/b表示單詞邊界,/string\b/g.test("strings")為false,是因?yàn)樽址?code>strings在g后還有s所以不是單詞邊界。/string\b/g.test("string~~~")為true因?yàn)?code>g后面接~,單詞已經(jīng)結(jié)束了。
但是這不能說(shuō)g和~間有一個(gè)單詞邊界/b這樣的東西。字符串只是簡(jiǎn)單的一串字符,string~~~只是s、t、r...~這樣一串字符在一起。 /b是否存在是正則表達(dá)式解析程序發(fā)現(xiàn)你的string~~~是string接~~~,在string就已經(jīng)結(jié)束了一個(gè)單詞,所以它判定你這個(gè)字符串符合/string\b/g這樣的模式。
請(qǐng)問(wèn)你的問(wèn)題解決了嗎?我也遇到同樣的問(wèn)題了
工具是idea么,是的話應(yīng)該是輸出路徑?jīng)]有配置好
vue直接引用就可以了吧,不需要安裝吧
因?yàn)槟愕腣iewModel里面還有值嗎
23333,你這個(gè)是最經(jīng)典的函數(shù)防抖應(yīng)用場(chǎng)景。
使函數(shù)在一定的時(shí)間內(nèi)不被再調(diào)用后執(zhí)行。
也就是說(shuō),當(dāng)你觸發(fā)scroll或者change時(shí),不要直接去修改數(shù)據(jù),而是添加一個(gè)定時(shí)器來(lái)執(zhí)行修改數(shù)據(jù)的操作,在下次觸發(fā)函數(shù)時(shí),清除這個(gè)定時(shí)器,然后重新設(shè)置定時(shí)器。
或者說(shuō)用函數(shù)節(jié)流的方式也可以實(shí)現(xiàn)你的效果。
// 函數(shù)節(jié)流的實(shí)現(xiàn)方案
let throttleIdentify = 0
$dragable.addEventListener('mousemove', () => {
if (throttleIdentify) return
throttleIdentify = setTimeout(() => throttleIdentify = 0, 500)
console.log('trigger')
})
// 函數(shù)防抖方案
let debounceIdentify = 0
window.addEventListener('resize', () => {
debounceIdentify && clearTimeout(debounceIdentify)
debounceIdentify = setTimeout(() => {
console.log('trigger')
}, 300)
})
看選擇咯,目的都是限制函數(shù)執(zhí)行的頻率。
這里有一篇之前的博客可以參考:函數(shù)節(jié)流與函數(shù)防抖
初學(xué)的時(shí)候不要用redux。
曾經(jīng)有人說(shuō)過(guò)這樣一句話。
"如果你不知道是否需要 Redux,那就是不需要它。"
Redux 的創(chuàng)造者 Dan Abramov 又補(bǔ)充了一句。
"只有遇到 React 實(shí)在解決不了的問(wèn)題,你才需要 Redux 。"
北大青鳥(niǎo)APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國(guó)IT技能型緊缺人才,是大數(shù)據(jù)專(zhuān)業(yè)的國(guó)家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國(guó)一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國(guó)成功上市,融資1
北大課工場(chǎng)是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國(guó)家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國(guó)制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級(jí)產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國(guó)職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開(kāi)發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_(kāi)發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫(kù),具有快速界面開(kāi)發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁(yè)制作和網(wǎng)頁(yè)游戲開(kāi)發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開(kāi)發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國(guó)Software AG 技術(shù)顧問(wèn),美國(guó)Dachieve 系統(tǒng)架構(gòu)師,美國(guó)AngelEngineers Inc. 系統(tǒng)架構(gòu)師。