2016-02-15 2 views
0

У меня есть следующие проблемы: У меня есть функция внутри контроллера, а функция определяет значение $ scope.name

app.controller('myController', ['$scope', function($scope) { 
    function myFunction() { 
     $scope.name = 'myName'; 
    } 
document.getElementById('my-id').addEventListener("click", myFunction); 
}]) 

Я не могу использовать нг щелкните по нескольким причинам. UPDATE: Я не могу использовать ng-click из-за галереи photoswipe и socialshare. Я хочу добавить пользовательский FB-ресурс, и если я использую ng-click, он закроет открытое изображение с фотографиями. См. Пример here. Откройте изображение и нажмите на верхнюю левую пользовательскую папку.

Обратите внимание, что даже если я использую здесь пример, он не свяжет мой объект $ scope.name с html.

Если я попытаюсь записать значение, оно работает как шарм, например.

console.log($scope.name); //will work perfectly 

В HTML это не будет связывать значение:

<div ng-controller="myController"> 
<button id="my-id"> 
    <p>{{name}}</p> 
</button> 
</div> 
+0

Вы никогда не должны напрямую взаимодействовать с DOM с контроллерами (т. Е. Нет 'document.getElement ...'). Этот вопрос сам по себе отвечает (цикл дайджеста обходит), но для получения реального углового ответа вам нужно изменить свой подход. Для этого нам нужно знать, какая у вас проблема с 'ng-click'. – deceze

+0

Чтобы обновить область из области углов (собственный обработчик щелчка, обратный вызов jQuery), используйте '$ scope. $ Apply', но поскольку @deceze сказал, что вы делаете это неправильно. – ste2425

+0

Я предлагаю вам открыть новый вопрос с подробностями о проблеме между 'ng-click' и photoswipe; это слишком неопределенно, что именно проблема, но я уверен, что нет причин, по которым это невозможно решить. – deceze

ответ

5

Для местного раствора, проблема заключается в том, что обычный слушатель событий будет обходить цикл дайджеста. Это означает, что ваш $scope обновляется, но Angular не знает об этом, потому что событие, вызвавшее обновление, не находится на радаре Angular, и, следовательно, Angular не обновляет шаблон. (bad) Решение этой проблемы заключается в использовании $scope.$apply для принудительного запуска дайджеста.

Но опять-таки, это не-угловое решение, и вам будет намного лучше, если вы исправили любую проблему, с которой вы столкнулись, с ng-click.

Смежные вопросы