AngularJS ng-click не работает в цикле дайджеста

Html:

<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);
       });
 };

Проблема: я проверил с помощью отладчика chrome, href фактически обновлен, но событие не срабатывает (т.е. не переходит на URL). Если я нажму еще раз, это работает.

Если я добавлю заявление document.getElementById('#link').click() в конце if предложение выдаст сообщение об ошибке "Идет цикл дайджеста"

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

1 ответ

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