2016-12-01 2 views
1

Html:AngularJS нг-клик не работает в дайджесте цикле

<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-адресу). Если я снова нажму на него, это сработает.

Если добавить заявление document.getElementById('#link').click() в конце if пункта, он будет запрашивать ошибку «переваривать цикл продолжается»

Как я могу решить эту проблему.

+0

ваш код не «идти» в любом месте, она изменяет только 'href'. во второй раз, когда вы нажимаете его, браузер видит, что '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; 
     } 
     }); 
    }; 
    } 
}()); 
Смежные вопросы