2015-12-16 49 views
5

我目前正在使用Angular.JS 小aplication在我看來,我有以下按鈕Angular.JS的onclick功能只是呼籲首先點擊

<md-button class="md-primary" ng-click="editUser(user, $event)">Edit</md-button> 

的editUser方法看起來是這樣的:

$scope.editUser = function (user, $event) { 

    $scope.userToEdit = user; 

    $mdDialog.show({ 
      controller: DialogController, 
      targetEvent: $event, 
      templateUrl: '/js/modules/user/views/edit.tmpl.html', 
      parent: angular.element(document.body), 
      clickOutsideToClose: true, 
      scope: $scope 
     }) 
     . 
     then(function (answer) { 
      if (answer == "save") { 
       for (right in $scope.allSystemRightsStatements) { 
        if ($scope.allSystemRightsStatements[right].selected) { 
         if($scope.userToEdit.rights==null){ 
          $scope.userToEdit.rights = []; 
         } 
         $scope.userToEdit.rights.push($scope.allSystemRightsStatements[right]); 
        } 
       } 
       $scope.updateUser($scope.userToEdit); 
      } 
      $scope.userToEdit = {}; 
     }, function() { 
      $scope.userToEdit = {}; 
     }); 
}; 

$scope.updateUser = function (user) { 
    //userService.updateUser makes a $http PUT request 
    var promise = userService.updateUser(user); 
    promise.then(function (result) { 
     $mdToast.show(
      $mdToast.simple(result.message) 
       .position($scope.getToastPosition()) 
       .hideDelay(3000) 
     ); 
    }, function (reason) { 
     $mdToast.show(
      $mdToast.simple(reason) 
       .position($scope.getToastPosition()) 
       .hideDelay(3000) 
     ); 
    }, function (update) { 
    }); 
}; 

現在對話框很好地顯示,並且也調用了應答函數,所有事情都按預期進行。

但是,當我第二次單擊該按鈕時,editUser函數未被執行。就好像該按鈕上的onClick事件在關閉對話框時被刪除了一樣。

解決這個問題的任何幫助是極大的讚賞, 感謝

+0

你看到在控制檯日誌中的任何錯誤綁定你的按鈕? –

+0

你的錯誤可能在** ..一些小邏輯**你的代碼的一部分... 這也可能是由於這樣的事實,即你正在用'$ scope.updateUser'調用一個異步方法,然後立即將'$ scope.userToEdit'設置爲empy對象。 '$ scope.updateUser'可能沒有足夠的時間來完成它打算做的事情,並將傳遞的對象設置爲空對象... – ezcoding

+0

沒有控制檯日誌爲空:-( 更新實際上是正確執行的(我將添加小邏輯來澄清 – bwright

回答

3

至於說here

它可能是一個好主意,明確提到,該範圍將被破壞後隱藏對話框(所以人們不應該直接傳遞控制器的$範圍)。

(關於要傳遞到mdDialog範圍)

所以,範圍被破壞,角度不與任何動作

+0

澄清:我從'$ mdDialog.show'調用中刪除了'scope:$ scope'並添加了'locals:{user:user,.. other objects}' – bwright