-1
コントローラの機能を実行する角度ディレクティブに2度問題があります。この回避策があるかどうか、ディレクティブコントローラが2回実行されないようにする方法
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;
});
}
}
};
});
<td class="text-primary"><span ng-click="showuserTypeForm = !showuserTypeForm">{{user.userType | userType}}</span><div ng-show="showuserTypeForm" usertype></div></td>
範囲でupdateusertype方法でこの原因競合は、具体的に可変pastPost、私はそれがある前に、user.userTypeに等しくする必要がHTMLいくつかの理由で$ http opが失敗した場合、user.userTypeの値を元に戻すことができます。しかし、関数が2回実行された場合、pastPostは更新されたuser.userTypeと等しくなりました。これは私が期待していないものです。
ここでは、initで2回実行されていません:http://jsfiddle.net/5brmLqad/あなたの問題は何ですか? 「ダブル」実行がトリガーされるコードを追加してください。 – lin
問題を再現するために投稿したフィドルを更新してください。 – lin