2016-12-01 70 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實際更新,但事件不會觸發(即不去網址)。如果我再次點擊它,它會起作用。

如果我在if條款末尾添加語句document.getElementById('#link').click(),它會提示錯誤「消化週期正在進行中」

我怎樣才能解決這個問題。

+0

您的代碼不「走出去」任何地方,它只是改變了'href'。第二次點擊它時,瀏覽器將'href'看作具有價值並且去那裏。如果你想真的去那裏,你需要在你的代碼中告訴它。作爲一個方面說明,你可能不應該使用jQuery來改變'href',angular並不總是能夠識別外部框架的變化,儘管在這種情況下,這不是問題的原因。 – Claies

+0

要更好地使用'$ 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; 
     } 
     }); 
    }; 
    } 
}());