我創建了一個使用ES6功能的Angular應用程序,所以我使用Babel來轉換JS。我決定不使用ES6模塊,所以不是使用常規的es2015
預設,而是使用es2015-script
。角控制器As和babel
問題在於Babel編譯箭頭函數的方式。我採用了棱角分明的controllerAs符號,像這樣
angular.module('appControllers')
.controller('StoryController', ['StoryProvider', (StoryProvider)=>{
this.plaintext='test plain';
}]);
這段代碼transpiled到
var _this = this;
angular.module('myControllers')
.controller('StoryController', ['StoryProvider', function (StoryProvider)
{
_this.plaintext = 'test plain';
}]);
所以this
是完全錯誤的範圍和綁定不工作。當我手動更改編譯代碼爲
angular.module('myControllers')
.controller('StoryController', ['StoryProvider', function (StoryProvider)
{
var _this = this;
_this.plaintext = 'test plain';
}]);
它一切正常。
爲什麼巴貝爾設置中間變量_this
這種方式?有沒有另一個巴貝爾預設來正確處理這個問題?我應該使用ES6模塊嗎?我遇到的問題與本期第angular 1.5 component and babel中描述的相同,這就是爲什麼我使用了es2015-script
預設。
用常規的'function()'替換箭頭函數有幫助,但我真的很喜歡用''this'詞法。 –
這段代碼似乎沒有任何問題;這裏使用箭頭函數是錯誤的。控制器被設計成擁有自己的'this'。箭頭函數正在做它設計要做的事情(詞法綁定'this'值(不綁定它自己的this','arguments','super'或'new.target')。),這不是管制員期望如何申報。 – Claies
「但我真的很喜歡用詞法這個。」你不能,除非你想使用'$ scope' –