標籤:

關於ng-click中this的指向問題?

html中:&Hello&

js中:在controller中定義了like方法 controller(myController,function ($scope){

$scope.like=function(obj){obj.innerHTML="World"} 發現this並不是指向a的,試了下console.log(e.target) 結果為undefined,Angular新手請多多指教。


this是指向當前的scope的

比如你定義了一個

&{{value}}&

然後你想點擊這個div的時候改變這個div的內容,那麼在相應的controller中應該這樣寫:

$scope.change = function(){
this.value = new value;
//等價於$scope.value = new value
}

這種this的特性在ng-repeat中非常好用。

比如你有一堆ng-repeat渲染出來的東西:

&{{item.value}}&

然後你想給他們綁定一個統一的函數,點擊之後只會把自己的值改變,此時this就是指向當前的子scope:

$scope.change = function(){
this.item.value = new value;
//由於是ng-repeat出來的,所以這裡this指向的scope是上面那個案例中$scope的子集。
//即this.$parent === $scope;
}


Angular 不推薦在 controller 裡面直接操作 DOM ,應該通過 $scope 上面的變數結合 template 裡面的表達式來修改 DOM 的,所以這種事件回調是拿不到 DOM 節點的。


https://github.com/johnpapa/angular-styleguide/blob/master/a1/i18n/zh-CN.md

angularjs規範裡面【Style Y032】這裡的

function SomeController($scope, $log) {
var vm = this;
vm.title = Some Title;

$scope.$watch(vm.title, function(current, original) {
$log.info(vm.title was %s, original);
$log.info(vm.title is now %s, current);
});
}

對應顯示層的&這裡開始並不像$scope顯示title的數據,而是修改後才使用watch監聽,這樣的規範設定豈不是很麻煩有人解釋一下問什麼這樣設定?


推薦閱讀:

在用angularjs的時候有沒有必要用requirejs或者是browserify?
小菜鳥如何系統性學習React?

TAG:AngularJS |