Angular 在 Components之間的值得傳遞方式分割成Inputs和Outputs. 寫法如下
1 | @Components({ |
另外一種寫法
1 | import { Component, View, Input, Output, EventEmitter } from 'angular2/angular2'; |
Angular 在 Components之間的值得傳遞方式分割成Inputs和Outputs. 寫法如下
1 | @Components({ |
另外一種寫法
1 | import { Component, View, Input, Output, EventEmitter } from 'angular2/angular2'; |
After Scaffold from existing datbase, and then add migration at first time.
EF will create something like above. But in first migration will have everything that already existed in database. therefore, delete that file and add migration again. Now this time. you will get an empty migration file. WHy? because ContextModelSnapShot. It seems EF will compare all model files with snapshot file. and find the differences to create migration content file.
And Now it switch to Code first mode. ^^
http://docs.asp.net/en/latest/security/authorization/simple.html
這裡描述怎麼設定頁面授權的方式,可是卻都沒有提到如果說沒授權的人要頁面轉至登入畫面的方式
經過網頁上的查詢及測試後. 在1.0.0-rc1-update1的版本裡,設定方式如下
1 | public void ConfigureServices(IServiceCollection services) |
到這裡為止就可以做出跟以前一樣遇到沒有授權的頁面就轉到登入畫面了
###參數說明
重點在於AutomaticAuthenticate 及 AutomaticChallenge 這兩個參數 他的說明如下:
這裡出現另外一個參數 AuthenticationScheme AuthenticationScheme: The AuthenticationScheme in the options corresponds to the logical name for a particular authentication scheme. A different value may be assigned in order to use the same authentication middleware type more than once in a pipepline.
這表示在Controller裡的[Authorize]可以指定AuthenticationScheme, 就可以做出很有彈性的權限設定轉址或是其他後續動作了
1 | [Authorize(ActiveAuthenticationSchemes ="abc")] |
##update 設定頁面授權的方式在這裡 http://docs.asp.net/en/latest/security/authentication/cookie.html
之前沒有特別留意ngOptions在1.4版裡面修正了一些東西,包含track by的用法 先簡單的描述一下狀況
1 | $scope.options = [ |
這種寫法應該算是很常見的用法
但是這樣子的寫法經過1.4版處理後, 仔細去看他的html會變成
1 | <select ng-options="m.id as m.display for m in options" ng-model="selected"> |
竟然多了型別…>"<, 這表示如果我的$scope.selected = '3’時,就會選不到東西了
好吧,那如果用track by呢
1 | <select ng-options="m.id as m.display for m in options track by m.id" |
DOM
1 | <select ng-options="m.id as m.display for m in options track by m.id" ng-model="selected"> |
這樣子看起來正常多了,但是$scope.selected的值不管是使用 3 or 「3」 都選不到東西. 只有給他options裡面的某一個object他才會被選定。 所以看起來track by是用 for m的m當作選定的值,那 select as label不就沒用了,沒用就拿掉他
1 | <select ng-options="m.display for m in options track by m.id" |
DOM
1 | <select ng-options="m.id as m.display for m in options track by m.id" ng-model="selected"> |
看起來都一樣了
結論 用track by: select裡的ng-model會是以object的型態呈現, 不需要再寫select as xxxx了. 不用track by: 就看所表示的select是怎樣的型態,ng-model就是怎樣的型態,但是多了型別的判斷
Class的組成元素:
Constructor
Prototype methods:
Static methods: 不需要New class就可以使用, 類似C#的Static
1 | class Polygon { |
Hoisting: Class並沒有Hoisting特性,所以需要先定義才可以使用,這點須注意
Class也可以有繼承的性質 範例
1 | class Animal { |
Super用來呼叫Parent的function
1 | class Cat { |
可以將在function的參數給予預設值
1 | function fnWithDefaultArg(a,b=[]){ |
The spread operator allows an expression to be expanded in places where multiple arguments (for function calls) or multiple elements (for array literals) are expected.
1 | function fn(a,b,c){ |
A more powerful array literal
1 | var parts = ['shoulders', 'knees']; |
A better push
1 | var arr1 = [0, 1, 2]; |
現在SPA的網站越來越盛行,下載檔案的功能在ajax下是有點麻煩,但是感謝HTML5下的Blob功能。網路上就有相對應的js功能出來 所以,引用這位大大的程式 (https://github.com/eligrey/FileSaver.js),其相關限制都有在該專案上描述
所以使用方法如下 (Client端)
1 | $http.post('api url', query, { responseType: 'arraybuffer' }).then(function (response) { |
重點 : responseType 要設定為 arraybuffer
(Server端) Webapi要回傳的httpresponseMessage內容如下, 不好意思程式碼是VB, 因為這個專案是用VB開發的,但是基本觀念的一樣的
1 | Dim response As HttpResponseMessage = New HttpResponseMessage() |
以上的動作就可以讓ajax的call直接做下載檔案的動作,就不用另外產生一個form然後做post到新視窗後再下載了 ^^
可以將值從陣列或是物件裡取出並設定到變數上
1 | [a, b] = [1, 2] |
1 | var foo = ["one", "two", "three"]; |
其他用法 1.Multiple-value returns
1 | function f() { |
2.Ignoring some returned values
1 | function f() { |
3.衍伸用法: Pulling values from a regular expression match
1 | var url = "https://developer.mozilla.org/en-US/Web/JavaScript"; |
1 | var o = {p: 42, q: true}; |
另外一種用法, 將物件裡的值設定到新的變數名稱上
1 | // syntax |
衍生用法: Function argument defaults
1 | var [missing = true] = []; |
1 | function drawES6Chart({size = 'big', cords = { x: 0, y: 0 }, radius = 25} = {}) |
另外一種情境 Module (non-ES6) loading
1 | const { Loader, main } = require('toolkit/loader'); |
CTRL+SHIFT+G 在交談中切換重要屬性 CTRL+D, DEL 刪除交談 退格鍵 封存交談 CTRL+Q 標示為已讀取 CTRL+U 標示為未讀取 CTRL+R 回覆目前郵件 CTRL+SHIFT+R 全部回覆 CTRL+F 轉寄目前郵件 CTRL+E,F3 搜尋 Alt+C 接受會議邀請 Alt+D 拒絕會議邀請 Alt+N 暫訂會議邀請 CTRL+N 建立新的電子郵件 CTRL+SHIFT+M 建立新的電子郵件 CTRL+SHIFT+V 移到檢視 CTRL+1 切換至 [郵件] CTRL+2 切換至 [行事曆] CTRL+SHIFT+I 切換至 [收件匣] CTRL+SHIFT+O 切換至 [寄件匣]
ALT+I 新增附件 CTRL+M 手動同步帳戶 F9 手動同步帳戶 CTRL+ + 放大 CTRL+ - 縮小 ALT+S 傳送郵件 Ctrl + Enter 傳送郵件 F6 在區域間移動 F7 切換鍵盤瀏覽
在ES2015裡面,幾個比較大的改變Part1
人真的可以在懶惰一點,為了不要寫__function__這幾個字,就有 ()=>{} 的出現。這就是Arror Function 跟Lambda的表示法很像, 真的用法也是跟那個一樣
1 | // Old |
另外一個要注意的是Arrow Scope的問題,
1 | var hendrik = { |
最快樂的事情非屬這個, 文字串的組合可以用 ` (鍵盤左上角流水符號的那個鍵), 可以讓你多行編輯文字字串 在配合 ${變數} 來將變數顯示在文字裡面。 這樣子就不用一堆的 『加號』 來串文字了,超快樂的
1 | // old |
FYI: 新版的C#/VB.net也有將此功能加入,已經可以不用string.format + 無數的{流水號}了
非常重要 要將使用var來定義變數的改用let來定義變數, 這樣子就可以避免同樣名稱的變數在不同的scope被覆蓋的情形發生
1 | //=== old === |
常數,當變數一旦被指定為const時,就不可以被改變了
1 | const pi = Math.PI; |