<style>
html, body {
margin: 0;
padding: 0;
height: 100%;
}
* {
box-sizing: border-box;
}
.top {
height: 60px;
border: 1px solid #ccc;
}
.wrap {
height: calc(100% - 60px);
}
.box {
height: 1000px;
border: 1px solid #ddd;
}
</style>
<div class="top"></div>
<div class="wrap">
<div class="box"></div>
</div>
親測,是有滾動條的啊
props: {},
slot: ''
放到同級
Canvas
SVG
設置cookie的path為/
將rules
中的type刪掉
建議參考lib-flexible源碼讀后感:
最后給body設置font-size,作者團隊也解釋了(原話):
body上設置12 * dpr的font-size值,為了重置頁面中的字體默認值,不然沒有設置font-size的元素會繼承html上的font-size,變得很大。
function(t,i){
return t+i
}(1,2)
t,i就相當于1,2
你對號入座看一下
WXML
<button bindtap="startRecord">開始錄音</button>
demo.js
startRecord: function() {
wx.startRecord({
success: function(res) {
var tempFilePath = res.tempFilePath
},
fail: function(res) {
//錄音失敗
}
})
}
把你要渲染的路由放進數組里,然后只支持history模式。但是這個東西是為了SEO的吧,并不能加快你真實頁面的渲染速度。
黑心企業(yè),才不告訴你o(′^`)o
setState
是異步的,也就是說:并不是setState
被調用后state
就會立即改變,它只是保證在之后的某刻會被改變。因此,你的第2,3個setState
中的this.state.count
依舊是undefined
。
另外,為了優(yōu)化性能,在一定時間內像這種傳對象字面量方式調用setState
是會被批量處理的,前兩個setState
會被合并到第三個調用中,也就是說只有第三個會起作用。
為了達到你原來代碼的意圖,你應該使用updater
函數
this.setState((prevState) => ({ ...prevState, count: 0 }));
this.setState((prevState) => ({ ...prevState, count: prevState.count + 1 }));
this.setState((prevState) => ({ ...prevState, count: prevState.count + 1 }));
問問題要有注意問明的明確性和信息對稱性。
明確性是指表明你在什么情況下遇到了什么什么問題,需要得到什么樣的幫助,你期望的過程或者結果是怎么樣的,而實際的過程和結果又是怎么樣的
信息對稱性是指……你在問問題的時候要清楚回答問題的人所了解的信息與你所了解的信息并不相同,比如,你在做什么,目的是什么,這些與問題直接相關的信息都應該描述出來。
現在來說說你的問題……說實在的,我并不知道你想干什么,也不知道 .is_array === "false"
的時候相關的數據是什么樣子,甚至到底是 .is_array === "false"
還是根本就沒有 .is_array
這個屬性存在。
代碼中大量使用了連續(xù)引用屬性這種語法,比如 itemdata.content[i].value[key].value[...]
,這在閱讀代碼的時候很難理清關系,可以考慮適當的添加一些中間變量。像 array[array.length] = xxx
這種語法雖然沒有錯誤,但在多層引用的情況下,直接使用 .push()
會讓代碼更簡潔易懂(當然最好還是加中間變量)
從提供的信息來看, if
分支似乎沒有問題,問題出在 else
分支上,但是題中并沒有提到 else
分支上的相關信息(除了代碼),但純從代碼分析,首先得保證 itemdata.content[i].value[key].value
是個數組,才能用 .push()
,如果它都不是一個數組,而是 null
、undefined
甚至是一個對象,那 .push
多半是要報錯的。從邏輯上來說,既然它本身不是數組或沒有數據,是可以用 =[ ["", "", ""] ]
來代替 .push(["", "", ""])
的
兩個文件具體指哪兩個文件?如果是類似 bundle.js 和 0.bundle.js 這種的話,這是正常的,0.bundle.js 就是指從主 bundle.js 分離出的需要懶加載的那個文件。
updated
uh...根據你更新的描述的話,有試過對每個 require.ensure 增加 chunkName 參數嗎,就是它的最后一個參數,這樣對于相同的懶加載邏輯形成的 bundle 都會被打包到同一個 chunk 中。我猜 order.js 被生成了兩次是因為你沒有指定 chunkName,這樣 webpack 會將每次的懶加載邏輯當做不同的 chunk 來對待。
另外,dependencies 參數(也就是第一個參數)如果是模塊本身并沒有什么意義,如果沒有什么必須執(zhí)行的依賴模塊,保留空就好。
最后,不知道你使用的 webpack 的版本是多少,require.ensure 這個方法官方已經建議棄用了,如果可能的話,還是建議使用新的 import() 方法。
以上,個人拙見,如有錯誤,還望見諒。
先不說卡死的原因,首先你這個dom時間綁定的想法有問題,頁面加載完$('#remove_favorite_btn'), $('#add_favorite_btn')這兩個click的綁定只能成功一個,你的第二個在現在dom里是沒有的,然后你再第一個事件里改了這個元素id,但是這個不會改變這個dom節(jié)點綁定的click事件,這個事件不是映射關系。
卡死的原因我覺得應該是每個事件都綁了ajax異步,你點擊過多導致的。
已經自己寫了一個解析方法
/**
* 解析字符串為 Date 對象
* @param dateStr 日期字符串
* @param fmt 日期字符串的格式
* 目前僅支持使用 y(年),M(月),d(日),h(時),m(分),s(秒),S(毫秒)
*/
Date.of = function (dateStr, fmt) {
if (!dateStr) {
throw new Error('傳入的日期字符串不能為空!');
}
if (!fmt) {
throw new Error('傳入的日期字符串的自定義格式不能為空!');
}
/**
* 日期格式化對象
* @param name 日期格式的名稱
* @param format 日期的格式值
* @param value 格式化得到的值
* @constructor
*/
function DateFormat(name, format, value, index) {
this.name = name;
this.format = format;
this.value = value;
this.index = index;
}
//日期時間的正則表達式
const dateFormats = {
year: 'y{1,4}',
month: 'M{1,2}',
day: 'd{1,2}',
hour: 'h{1,2}',
minute: 'm{1,2}',
second: 's{1,2}',
milliSecond: 'S{1,3}'
};
//如果沒有格式化某項的話則設置為默認時間
const defaultDateValues = {
year: '2001',
month: '01',
day: '01',
hour: '00',
minute: '00',
second: '00',
milliSecond: '000'
};
//保存對傳入的日期字符串進行格式化的全部信息數組列表
const dateUnits = [];
for (const fmtName in dateFormats) {
const regExp = new RegExp(dateFormats[fmtName]);
if (regExp.test(fmt)) {
const matchStr = regExp.exec(fmt)[0];
const regexStr = String.fill('`', matchStr.length);
const index = fmt.indexOf(matchStr);
fmt = fmt.replaceAll(matchStr, regexStr);
dateUnits.push(new DateFormat(fmtName, String.fill('\\d', matchStr.length), null, index));
} else {
dateUnits.push(new DateFormat(fmtName, null, defaultDateValues[fmtName], -1));
}
}
//進行驗證是否真的是符合傳入格式的字符串
fmt = fmt.replaceAll('`', '\d');
if (!new RegExp(fmt).test(dateStr)) {
return null;
}
//進行一次排序, 依次對字符串進行截取
dateUnits.sort(function (a, b) {
return a.index - b.index;
});
for (var i = 0, length = dateUnits.length; i < length; i++) {
const format = dateUnits[i].format;
if (format == null) {
continue;
}
const matchDateUnit = new RegExp(format).exec(dateStr);
if (matchDateUnit !== null && matchDateUnit.length > 0) {
dateStr = dateStr.replace(matchDateUnit[0], '');
dateUnits[i].value = matchDateUnit[0];
}
}
//將截取完成的信息封裝成對象并格式化標準的日期字符串
const obj = dateUnits.toObject(function (item) {
return {
key: item.name,
value: item.value
};
});
const date = '{year}-{month}-{day} {hour}:{minute}:{second}:{milliSecond}'.format(obj);
try {
return new Date(date);
} catch (e) {
return null;
}
};
//下面是上面的 Date.of() 使用的一些輔助方法
/**
* 替換所有匹配exp的字符串為指定字符串
* @param exp 被替換部分的正則
* @param newStr 替換成的字符串
*/
String.prototype.replaceAll = function (exp, newStr) {
return this.replace(new RegExp(exp, "gm"), newStr);
};
/**
* 原型:字符串格式化
* @param args 格式化參數值
*/
String.prototype.format = function (args) {
var result = this;
if (arguments.length < 1) {
return result;
}
var data = arguments; // 如果模板參數是數組
if (arguments.length === 1 && typeof (args) === "object") {
// 如果模板參數是對象
data = args;
}
for (var key in data) {
var value = data[key];
if (undefined !== value) {
result = result.replaceAll("\\{" + key + "\\}", value);
}
}
return result;
};
/**
* 為 js 的 String 添加填充字符串的靜態(tài)方法
* @param item 填充的元素
* @param length 填充的長度
* @returns {string} 填充得到的字符串
*/
String.fill = function (item, length) {
var result = '';
for (var i = 0; i < length; i++) {
result += item;
}
return result;
};
/**
* js 數組轉換為一個 Object 對象
* @param fn 轉換方法
* @returns {{}} 得到的 Object 對象
*/
Array.prototype.toObject = function (fn) {
const obj = {};
this.map(fn)
.forEach(function (item) {
obj[item.key] = item.value;
});
return obj;
};
嗯,順便也發(fā)了一篇 blog 呢
https://rxliuli.blogspot.com/...
vue-router有全局守衛(wèi):router.beforeRouteLeave??梢杂眠@個統(tǒng)一設置路由離開時的動作
參考:https://router.vuejs.org/zh/g...
樓上的方法不是很贊同,這問題出現的原因是你的組件卸載了,但是setState確執(zhí)行了。正確做法是在卸載組件的時候:this.setState(() => {})
北大青鳥APTECH成立于1999年。依托北京大學優(yōu)質雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數據專業(yè)的國家
北大青鳥中博軟件學院創(chuàng)立于2003年,作為華東區(qū)著名互聯網學院和江蘇省首批服務外包人才培訓基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團創(chuàng)建于1999年,經過二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術與教育服務機構,發(fā)展為教育服務業(yè)的綜合性企業(yè)集團,成為集合面授教學培訓、網
達內教育集團成立于2002年,是一家由留學海歸創(chuàng)辦的高端職業(yè)教育培訓機構,是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
曾工作于聯想擔任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔任項目經理從事移動互聯網管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責任公司從事總經理職務負責iOS教學及管理工作。
浪潮集團項目經理。精通Java與.NET 技術, 熟練的跨平臺面向對象開發(fā)經驗,技術功底深厚。 授課風格 授課風格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網頁制作和網頁游戲開發(fā)。
具有10 年的Java 企業(yè)應用開發(fā)經驗。曾經歷任德國Software AG 技術顧問,美國Dachieve 系統(tǒng)架構師,美國AngelEngineers Inc. 系統(tǒng)架構師。