關於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
}
比如你有一堆ng-repeat渲染出來的東西:
&{{item.value}}&
$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.mdangularjs規範裡面【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 |