搞了半天也不知道問題是什么鬼,把parcel換成webpack,問題解決
parcel構建的只能dispatch,不能commit
橫向滾動布局 white-space: nowrap;
內(nèi)部元素 display: inline-block;
把url路徑指向你的文件,設置權限
采用cdn ,提高帶寬。推薦一個播放器vitomio
WTForms本身既可以用來渲染html控件,可以單獨用來驗證表單,如果要支持JSON,可以用1樓的hack。
我推薦你用flask_wtf,這個插件,這個插件是對wtfoms的進一步封裝,支持form,也支持json,CSRF,文件上傳。我在項目里,頁面渲染和WebService都是用的這個插件。
例子:form.py
from flask_wtf import FlaskForm
from wtforms import StringField, IntegerField
from wtforms.validators import Length, StopValidation
class MyForm(FlaskForm):
# 字段
name = StringField(validators=[Length(min=1, max=20, message="name長度需在1-20個字符間")])
name2 = IntegerField()
# 自定義驗證
def validate_age(self, field):
# 根據(jù)name2查詢model
# ......
model = None
if not model:
# StopValidateion不需要自己捕捉
raise StopValidation("name2信息不存在")
view.py
@app.route('/api/get_obj_info', methods=["GET", "POST"]):
def get_obj_info():
form = MyForm()
if request.method == "GET":
return jsonify({
# xxxxx
})
# validate_on_submit 會自動調(diào)用“validate_字段”這些驗證方法
# 驗證失敗后返回表單驗證的錯誤消息
if form.validate_on_submit():
return jsonify({
"status": "success",
"msg": "xxxx"
})
# 驗證未通過
return jsonify({
"status": "failed":
"msg": "xxxx",
"error": form.errors
})
前臺POST數(shù)據(jù):
{
name: "小明",
name2: "管理"
}es6 的函數(shù)默認值 + 結構可以解決這個問題
簡單的例子
function test({a = 'default'}){
console.log(a)
}
test({b: 'b'})
// default
test({a: 'a'})
// a
但是如果需要判斷很多內(nèi)容的話,函數(shù)參數(shù)會比較難寫
用promise封裝,你這個寫法有點不倫不類,(順便一提 async 是ES7)
Query(strSql)
{
return new Promise((resolve,reject)=>{
this._conpool.request()
.query(strSql, (err, result) => {
if(err){
//出錯
reject(err);
}else{
console.dir(result.recordset); //已查詢到數(shù)據(jù)在此
resolve(result.recordset);
}
});
});
}
調(diào)用:
let db = new DB();
db.Query('select * from sc_Product').then(ret => {
console.dir(ret);
res.json(ret);
}).catch(e=>{
//error
});
或者
async function(){
let db = new DB();
try{
let ret =await db.Query('select * from sc_Product');
console.dir(ret);
res.json(ret);
}catch(e){
//error
}
}
await用來wait的是一個promise(如果非promise會直接返回結果),而一個async函數(shù)的返回值實際上就是一個promise,所以他倆構成一套以同步的方式書寫異步代碼的語法。
任何異步的操作首先要封裝成promise才能用async/await這種語法糖。
從你的第一個函數(shù)里可以看出來你還不太懂promise的語法使用,建議找相關的博客研究一下
可以和客戶端封裝一個module來控制
嘗試修改module 中的 gradle文件 的版本號。你這個應該是 繼承AppCompatActivity的問題。版本高了。
js:this.style.left=0
jq:$(".box").css('left', 0);
不要把jq的語法和js 的弄混了
我遇到過一次 是與mock 沖突了
具體看這里:https://www.jianshu.com/p/720...
同問,題主你解決這個問題了嗎
<div onClikck={()=>(this.props.history.push('/'))}>go home</div>@media only screen and (orientation:portrait){
#container {
height: 100vw;
-webkit-transform: rotate(90deg);
-moz-transform: rotate(90deg);
-o-transform: rotate(90deg);
-ms-transform: rotate(90deg);
transform: rotate(90deg);
}
}
@media only screen and (orientation:landscape){
#container {
-webkit-transform: rotate(0deg);
-moz-transform: rotate(0deg);
-o-transform: rotate(0deg);
-ms-transform: rotate(0deg);
transform: rotate(0deg);
}
}
$format = "The %2\$s contains %1$d monkeys";
這個表情是心在滴血的意思,一個心一個點放好位置就是這樣了
onClick中設置Tabs的activeKey就可以了。
其實很多種方法 query的 router.push({ path: '/user', query: { userId: JOSN.stringify(str)}})
需要找一個proxy代理或者node 里面的 express的api來代理
import axios from 'axios'
import qs from 'qs'
// axios 配置
axios.defaults.timeout = 10000;
axios.defaults.baseURL = 'http://localhost:3000';
export function fetchGet(url, param) {
return new Promise((resolve, reject) => {
axios.get(url, {params: param})
.then(response => {
resolve(response.data)
}, err => {
reject(err)
})
.catch((error) => {
reject(error)
})
})
}
export default {
/**
* 用戶登錄
*/
Login(params) {
return fetchGet('/login', params)
},
/**
* popularmusic列表
*/
PopularList() {
return fetchGet('/playlist/detail', {id: 3778678})
},
/**
* classicalmusic列表
*/
ClassicalList() {
return fetchGet('/playlist/detail', {id: 71384707})
},
/**
* lightmusic列表
*/
LightList() {
return fetchGet('/playlist/detail', {id: 26467411})
},
/**
* radiomusic列表
*/
RadioList() {
return fetchGet('/playlist/detail', {id: 897089})
},
/**
* music歌詞
*/
MusicUrl(id) {
return fetchGet('/music/url', {id})
},
/**
* music歌詞
*/
MusicLyric(id) {
return fetchGet('/lyric', id)
},
/**
* music搜索
*/
MusicSearch(keywords) {
return fetchGet('/search', {keywords})
},
/**
* 排行榜
*/
MusicRank(idx) {
return fetchGet('/top/list', {idx})
},
}
token失效,可以放到服務端判斷。
然后返回一個帶失效狀態(tài)的status,你在fetch中統(tǒng)一處理就好了
例如:服務端返回455
fetch(url).then(respones => {
if(respones.status === 455) {
throw new Error('455');
}
}).then(/*正常的處理*/)
然后在index.js中使用onError鉤子,獲取到這一異常,直接dispatch到你的無權限頁面就好了。
北大青鳥APTECH成立于1999年。依托北京大學優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達內(nèi)教育集團成立于2002年,是一家由留學海歸創(chuàng)辦的高端職業(yè)教育培訓機構,是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學校辦產(chǎn)業(yè)為響應國家深化產(chǎn)教融合/校企合作的政策,積極推進“中國制造2025”,實現(xiàn)中華民族偉大復興的升級產(chǎn)業(yè)鏈。利用北京大學優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓領域的先行者
曾工作于聯(lián)想擔任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責任公司從事總經(jīng)理職務負責iOS教學及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術, 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術功底深厚。 授課風格 授課風格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術顧問,美國Dachieve 系統(tǒng)架構師,美國AngelEngineers Inc. 系統(tǒng)架構師。