2015-05-18 57 views
-1
$scope.retryTask = function(e) { 
     console.log(e); 
    }; 

$("#showloader").replaceWith(
        $compile(
        "<span class='iconexclaim'><img src='images/backupiconexclaim.jpg' /></span><span class='retry-btn' ng-click='retryTask(this)'>Retry</span>" 
      )($scope) 
); 

e的值意外地收到了控制器的範圍,而不是我單擊的圖像jquery對象。 );

+1

所以,哪裏是什麼問題?爲什麼你用這種方式在角度內使用jQuery?你嘗試解決什麼問題? – Grundy

+0

我想要點擊的元素的當前refrence。 –

+0

http://stackoverflow.com/questions/23107613/angularjs-get-original-element-from-ng-click使用$ event.currentTarget,但使用角度和jQuery這種方式似乎很奇怪 –

回答

1

我回答您的具體問題,而是繼續閱讀,因爲這不是一個應該如何處理創建角的應用程序。

要得到你需要通過$event局部變量的DOM元素角爲你創建:

<span class='retry-btn' ng-click='retryTask($event)'>Retry</span> 

然後,您可以用$event.currentTarget獲得元素:

$scope.retryTask($event){ 
    var target = $event.currentTarget; 
} 

較長版本

你不是「在Angular中思考」,所以,請首先閱讀以下SO問題/答案:"Thinking in AngularJS" if I have a jQuery background?"

簡而言之,忘記DOM內部控制器,只能使用ViewModel。

就你而言,你有一個簡單的加載程序,需要在加載時顯示。因此,表示$scope.isLoading變量,並在任務運行或完成時將其設置爲true/false。由視圖模型

.controller("MainCtrl", function($scope, SomeSvc){ 
    // do some async task right away 
    doTask(); 

    $scope.retryTask = function(){ 
    doTask(); 
    }; 

    function doTask(){ 
    // before start, set to true 
    $scope.isLoading = true; 
    SomeSvc.doTask() 
      .then(function(data){ 
       $scope.data = data; // if needed 
      }) 
      .finally(function(){ 
       // when finished, set to false 
       $scope.isLoading = false; 
      }); 
    } 
}) 

而讓視圖中 「驅動」:然後,您的視圖可以做出相應的反應(與ng-show/ng-hideng-if

<div ng-show="isLoading">loading...</div> 
<div ng-hide="isLoading"> 
    {{data}} 
</div> 
相關問題