2018-01-10 圖表、 Vue:v-if與v-show比較、 Asp.Net底層解析-生命周期綜合分析、iOS定時器、javascript使用的兩項原則

第一組:姚成棟 圖表

其實我們的模板中是有圖表的,有折線圖、柱狀圖和餅圖等等。

如第六張的折線圖代碼如下

<div ui-jq="plot" ui-options="
              [
                { data: {{d0_1}}, label: 'A', points: { show: true }, lines: { show: true, fill: true, fillColor: { colors: [{ opacity: 0.1 }, { opacity: 0.1}] } } }, 
                { data: {{d0_2}}, label: 'B', points: { show: true, radius: 4 } }
              ],
              {
                colors: [ '{{app.color.info}}','{{app.color.warning}}' ],
                series: { shadowSize: 2 },
                xaxis:{ font: { color: '#ccc' } },
                yaxis:{ font: { color: '#ccc' } },
                grid: { hoverable: true, clickable: true, borderWidth: 0, color: '#ccc' },
                tooltip: true,
                tooltipOpts: { content: '%s of %x.1 is %y.4',  defaultTheme: false, shifts: { x: 0, y: 20 } }
              }
            " style="height:240px"></div>
          </div>             

其中數(shù)據(jù)如下:

如果想要改成柱狀圖只需在上面的html代碼fillColor屬性中加入:

 bars: { show: true, barWidth: 0.6, fillColor: { colors: [{ opacity: 0.5 }, { opacity: 0.9}] } }

第二組:徐晉 Vue:v-if與v-show比較

1. 共同點

都是動態(tài)顯示DOM元素

2. 區(qū)別

(1)手段:v-if是動態(tài)的向DOM樹內(nèi)添加或者刪除DOM元素;v-show是通過設置DOM元素的display樣式屬性控制顯隱;
(2)編譯過程:v-if切換有一個局部編譯/卸載的過程,切換過程中合適地銷毀和重建內(nèi)部的事件監(jiān)聽和子組件;v-show只是簡單的基于css切換;
(3)編譯條件:v-if是惰性的,如果初始條件為假,則什么也不做;只有在條件第一次變?yōu)檎鏁r才開始局部編譯(編譯被緩存?編譯被緩存后,然后再切換的時候進行局部卸載); v-show是在任何條件下(首次條件是否為真)都被編譯,然后被緩存,而且DOM元素保留;
(4)性能消耗:v-if有更高的切換消耗;v-show有更高的初始渲染消耗;
(5)使用場景:v-if適合運營條件不大可能改變;v-show適合頻繁切換。

Tips:(1)如果v-show作用的元素,css文件中display:none,通過v-show進行設置不能顯示該元素;

原因:v-show控制顯隱,是通過js代碼去修改元素的element style,如果value為false,設置display: none;如果value為true,設置display: '';于是value為true時,只能將element style中的display效果清除,并不能覆蓋css中的display效果;

如下圖所示,value=true時,v-show改變的是element.style,由于無效,顯示效果由css文件中的display決定。

解決辦法:使用v-show的話,在vue解析之前隱藏DOM的話,盡量在style屬性里面設置display的值,不要在css文件中。

<ul v-touch:tap="message=2" style="display: none" v-show="show">


第三組:蔡永堅 Asp.Net底層解析-生命周期綜合分析

經(jīng)過對ASP.NET的生命周期的較詳細了解后,不得不承認,微軟在ASP.NET上的設計是非常精妙的,從ASPX頁面源代碼經(jīng)過頁面周期、各個服務器控件的生命周期,最終轉(zhuǎn)化為html代碼。這些生命周期的各個階段功能相對獨立、明確,ASP.NET開發(fā)者可以通過在特定階段添加相關代碼,以達到特定的目的。下面將頁面生命周期與服務器控件生命周期在一張圖上(從MSDN中復制)綜合展示:

從上面的示圖可以教完整地反映整個頁面生命周期(控件的生命周期包含在頁面周期之中)的執(zhí)行流程,調(diào)用某些方法之后觸發(fā)對應的生命周期事件,標志開始進入下一個生命周期階段。


第四組:張元一 iOS定時器

EFB項目中,需要實現(xiàn)后臺持續(xù)監(jiān)控電量的功能,這可以拆分為三個需求:

  1. 程序需要保持在后臺可以運行。
  2. 程序需要獲取ipad精確電量。
  3. 需要每隔一段時間掃描一次電量,以獲取當前有效的電量。

之前文章實現(xiàn)了需求一、二,本文先討論需求三的實現(xiàn):
創(chuàng)建一個NSTimer變量,每隔25s,執(zhí)行一次getbatterylevel函數(shù),

-(NSTimer *)timer{
    if (!_timer) {
        _timer = [NSTimer scheduledTimerWithTimeInterval:25.0 target:self selector:@selector(getbatterylevel) userInfo:nil repeats:YES];
    }
    return _timer;
}

在程序進入后臺時,啟動Timer:

#pragma mark - 程序進入后臺
-   (void)applicationDidEnterBackground:(UIApplication *)application {
//開啟定時器 不斷向系統(tǒng)請求后臺任務執(zhí)行的時間
    [self.timer fire];
}

獲取電量并存儲在變量中

-(void)getbatterylevel {
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"HH:mm:ss"];
    NSDate *datenow = [NSDate date];
    NSString *nowtimeStr = [formatter stringFromDate:datenow];
   
    NSString *str = self.textViewString;
    self.textViewString = [NSString stringWithFormat:@"%@ level is:  %.f%% \n%@ ",nowtimeStr,[UIDevice currentDevice].batteryLevel*100,str];
    NSLog(@" self.textViewString %@",self.textViewString);
    self.myVC.batteryLevellb.text = [NSString stringWithFormat:@"CurrentBatteryLevel:%.f%%",[UIDevice currentDevice].batteryLevel*100];
    self.myVC.textview.text = self.textViewString;
}

本項目demo的GitHub地址:
https://github.com/Frued/BatteryLevel


第五組:陳孚楠 javascript使用的兩項原則(接上文)

Hijax,即漸進增強的Ajax,也被稱為“簡化的Ajax”,也是hijack(劫持)的意思,也可直接理解成保存和操縱歷史的Ajax,Hijax是由Jeremy Keith(杰里米基斯)提出來的。

DOM Scripting: Hijax

主要原理:

傳統(tǒng)Web的表單提交和鏈接方式都會重新刷新加載整個頁面,這樣會造成內(nèi)容和資源的重復加載,對服務器造成壓力和浪費。

Hijax的原理是“劫持”表單提交和URL鏈接,然后通過Ajax獲取數(shù)據(jù)后局部更新DOM及內(nèi)容,從而減少帶寬消耗和服務器壓力,避免頁面刷新帶來的閃爍感和重復感,改善用戶瀏覽體驗。如果客戶端不支持JS或XMLHttpRequest,則表單和鏈接會按傳統(tǒng)方式提交和跳轉(zhuǎn)。

HTML5的History API能更好的實現(xiàn)這樣的功能,且更新URL地址時頁面不刷新,支持瀏覽器后退和前進按鈕,這個時候你也可以直接理解成History+Ajax。

5.5 Session history and navigation
Manipulating the browser history

優(yōu)點:
1、改善用戶瀏覽體驗,避免頁面刷新帶來的閃爍感和重復感;
2、減少服務器壓力和帶寬浪費。

缺點:
似乎只有一點,對搜索引擎不友好,不過Google的爬蟲會索引這樣的URL格式,即由一個由井號和嘆號構成的URL字符串(#!),稱為Shebang(也稱為Hashbang),我們在Shell和Python會經(jīng)??吹竭@樣的字符串,通過程序解析字符串并加載相應的模塊或內(nèi)容。不過HTML5的History API不需要這樣的URL格式,直接使用傳統(tǒng)URL格式就可以了。基于HTML5的History API的Hijax是更好的Hijax。

個人理解:
當瀏覽器支持ajax 時 ,只需要將相應參數(shù)傳遞給要更新的模塊頁面,得到該模塊產(chǎn)生的html,由javascript 的 innerHTML 局部刷新該模塊所在區(qū)域。

當瀏覽器不支持ajax時,則相應參數(shù)傳遞給整個頁面刷新,相應模塊讀取參數(shù)更新。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容