我一直在使用角度1.x 2年左右。我通常遵循一個配方,不要經常陷入困境。最近我開始嘗試新的方法,以更好地理解角和JavaScript。
我曾經相信我在javascript控制器中聲明的「vm」是鏈接(綁定)到html中聲明的data-ng-controller =「mycontroller as vm」。我剛剛學會了我可以用不同的名稱命名,綁定仍然會完美地發生。
然後,我決定停止在控制器中聲明「vm」,並開始使用原生javascript「this」限定符。
我試過如下:
angular.module('app')
.controller('Customers', [function() {
// var vm = this;
this.title = 'Customers';
this.customers = [
{name: 'Haley'}, {name: 'Ella'}, {name: 'Landon'}, {name: 'John'}
];
function 1stFunction() {
this.obj1 = {};
;
function 2ndFunction() {
this.var2 = {};
;
$scope.$on('myListener', function() {
this.var3 = {};
});
}]);
我驚訝的是,當我運行的應用程序,我得到一個「這是沒有定義」消息(或東西接近這個)指的是this.var3 = {}裏面的$ scope。$上。 $ scope。$。函數內的其他所有屬性都將起作用。
如果我只是取代「本」」爲‘VM’遍控制器,事情會完全重新工作。
我在想,如果有人能解釋一下究竟是怎麼回事。
感謝。
嗨,謝謝你的回覆。我試過「scope.on」上的「.bind(this)」,它工作。不過,現在我在函數中遇到同樣的錯誤。我在「scope.on」中創建了一個變量,並試圖在另一個函數中使用它,但現在我在函數中得到了「vm is undefined」。我認爲這是全局變量的限定符,任何由它定義的變量在整個javascript源代碼中都是可見的。 – user2568276