Как объяснено в другом ответе, наблюдаемые выражения оцениваются на каждом дайджесте, а результирующее значение сравнивается с их предыдущим значением - грязная проверка. Если есть изменение, другая итерация дайджеста начинается, потому что изменение одного значения может вызвать изменение в другом.
Если есть круговая зависимость (в том числе, круг одного, то есть одно и то же выражение различно каждый раз), это приводит к бесконечному циклу, который Angular останавливает после 10 итераций.
В частности, ваше возвращаемое значение функции getLink
является обещанием (возвращаемое значение $ http), а угловые привязки не «ждут» по обещанию.
То, что вы хотите сделать, это пнуть начало $http
вызова и в обработчике присвоить возвращаемое значение свойства ViewModel, который будет связан с <a>
:
function getLink(){
$http.get(inputUrl)
.success(function(data){
$scope.url = data.data;
});
}
Вы можете позвонить getLink
, например, когда ваш контроллер работает.
В окне вы просто привязать к url
ng-href
(не href
) атрибут:
<a ng-href="url">My Link</a>
Этот вопрос уже есть ответ, как она относится к бесконечному дайджесту. Вы определенно не можете использовать функцию внутри выражения, которое будет вызывать '$ http'. Чтобы сохранить путаницу для людей, которые ищут эту ошибку в будущем, лучше всего попытаться найти другой способ решить вашу конкретную проблему, и если вы все еще сталкиваетесь с ошибками, задайте новый вопрос. Попытка обновить вопрос, чтобы получить разные ответы, создает путаницу. – Claies