2016-12-01 75 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; 
     } 
     }); 
    }; 
    } 
}());