angularjs
2017-05-30 55 views -1 likes 
-1

我有兩次在我的控制器中運行函數的角度指令問題,我想知道如果有解決方法,或者如果我做錯了什麼。如何防止指令控制器運行兩次

JS

  app.directive("usertype", function() { 
       return { 
        restrict: 'A', 
        replace: true, 
        template : `<div style='position: absolute;' class='control-group'> 
            <div class="close-i"><i class="material-icons" ng-click="reset()">close</i></div> 
            <div class="preloader" ng-show = "loading && !done"></div> 
            <div class="done" ng-show = "done"><i class="material-icons">done</i><p>Update Successful</p></div> 
            <label class="control control--radio" style="margin-top: 30px" ng-click="updateusertype(user, '1')" ng-show = "!loading"><span>Super User</span> 
             <input type="radio" name="usertype" checked="checked"/> 
             <div class="control__indicator"></div> 
            </label> 
            <label class="control control--radio" ng-click="updateusertype(user, '2')" ng-show = "!loading"><span>Administrator</span> 
             <input type="radio" name="usertype"/> 
             <div class="control__indicator"></div> 
            </label> 
            <label class="control control--radio" ng-click="updateusertype(user, '3')" ng-show = "!loading"><span>Product Specialist</span> 
             <input type="radio" name="usertype"/> 
             <div class="control__indicator"></div> 
            </label> 
           </div> 
        `, 
        controller: function($scope, $http){ 
         $scope.reset = function(){ 
          $scope.loading = false; 
          $scope.done = false; 
          $scope.showuserTypeForm = false; 
         } 

         $scope.updateusertype = function(user, newPost){ 
           $scope.loading = true; 
           var pastPost = user.userType; 
           console.log(pastPost); 
           user.userType = newPost; 
           console.log(pastPost); 
           $http({ 
            url: "../../get1.php", 
            method: "GET", 
            params: user 
           }).then(function(res){ 
             $scope.done = true; 
             console.log(res.data); 
           }, function(err){ 
             console.log(pastPost); 
             user.userType = pastPost; 
           }); 
          } 
         } 
       }; 
      }); 

HTML

<td class="text-primary"><span ng-click="showuserTypeForm = !showuserTypeForm">{{user.userType | userType}}</span><div ng-show="showuserTypeForm" usertype></div></td> 

在範圍updateusertype方法這導致衝突,特別是可變pastPost,我需要它是等於user.userType,之前,它是已更新,所以如果$ http操作因某些原因失敗,我可以恢復user.userType的值。但是,如果該函數運行兩次pastPost現在等於更新的user.userType,這不是我所期望的。

+0

它在init中沒有運行兩次,你可以在這裏看到:http://jsfiddle.net/5brmLqad/所以你的問題是什麼?請添加由「觸發雙重」執行的代碼。 – lin

+0

請更新我發佈的小提琴以重現您的問題。 – lin

回答

0

黑客通過我的方式不是一個完美的解決方案,但這會暫時擱置。

    $scope.updateusertype = function(user, newPost){ 
          $scope.runOnce = !$scope.runOnce; 
          if($scope.runOnce){ 
           $scope.loading = true; 
           var pastPost = user.userType; 
           console.log(pastPost); 
           user.userType = newPost; 
           console.log(pastPost); 
           $http({ 
            url: "../../get1.php", 
            method: "GET", 
            params: user 
           }).then(function(res){ 
             $scope.done = true; 
             console.log(res.data); 
           }, function(err){ 
             console.log(pastPost); 
             user.userType = pastPost; 
           }); 
          } 
         } 
相關問題