2016-12-01 13 views
1

HTML:AngularJS ngのクリックがダイジェスト・サイクルでは動作しません

<a href id="link "ng-click="print(arg)"> print </a> 

Angularjsコントローラ:

$scope.return_promise =function(arg){ 
return $http.post('\path'); 
)}; 

$scope.print = function(arg){ 
url ="other/path/" 
$scope.return_promise(arg).then(function(r){ 
if(r){ 
$('#link').attr('href', url); 
     }); 
}; 

が問題:私はクロームデバッガで確認は、HREFが実際に更新されますが、イベントはトリガーしません(つまり、URLには移動しません)。もう一度クリックすると動作します。

私はif句の末尾に声明document.getElementById('#link').click()を追加する場合は、エラーを促します「サイクルをダイジェスト進行中である」

どのように私はこの問題を解決することができます。

+0

あなたのコードはどこでも、それだけで 'href'を変更し、「行きません」。 2回目にクリックすると、ブラウザは 'href'が値を持っているとみなしてそこに行きます。実際にそこに行こうとするなら、あなたのコードでそれを伝える必要があります。副作用として、おそらくjQueryを使って 'href'を変更するべきではないでしょうが、角度は常に外部フレームワークによる変更を認識できるわけではありませんが、この場合はそれが問題の原因ではありません。 – Claies

+0

URLに行くには '$ location'を使い、dom要素にアクセスするには' angular.element() 'を試してみてください。 – Hosar

答えて

0

ご質問があるかどうかわかりません。最初に、貼り付けるコードが、ここに追加したいコードであるかどうかをチェックします。これは、エラーが数多くあるためです。あなたが動的に交換したい場合href属性はそうのようにそれを実行します。

<div ng-controller="SomeCtrl as ctrl"> 
    <a href="ctrl.url" id="link "ng-click="ctrl.print(arg)">print</a> 
</div> 
(function() { 
    'use strict'; 

    angular 
    .module('module') 
    .controller('SomeCtrl', SomeCtrl); 

    SomeCtrl.$inject = ['$scope']; 

    function SomeCtrl($scope) { 

    var vm = this; 
    vm.url = "#"; 

    vm.return_promise = function (arg) { 
     return $http.post('/path'); 
    }; 

    vm.print = function (arg) { 
     var url = "other/path/"; 
     vm.return_promise(arg).then(function (r) { 
     if (r) { 
      vm.url = url; 
     } 
     }); 
    }; 
    } 
}()); 
関連する問題