Я пытаюсь увидеть, есть ли простой способ получить доступ к внутренней области контроллера через внешнюю функцию javascript (совершенно не имеющую отношения к целевому контроллеру)
Я видел здесь еще пару вопросов,
angular.element("#scope").scope();
получит область видимости из элемента DOM, но мои попытки в настоящее время не дают надлежащих результатов.
Вот jsfiddle: http://jsfiddle.net/sXkjc/5/
Сейчас я прохожу переход от простого JS к Angular. Основная причина, по которой я пытаюсь добиться этого, - сохранить как можно больше нетронутого исходного кода библиотеки; избавляя меня от необходимости добавлять каждую функцию в контроллер.
Есть идеи, как я могу добиться этого? Также приветствуются комментарии к приведенной выше скрипке.
angularjs
angularjs-scope
dk123
источник
источник
.scope()
требуется, чтобы были включены данные отладки, но использование данных отладки в производстве не рекомендуется из соображений скорости. Приведенные ниже решения, похоже, вращаются вокругscope()
Ответы:
Вам нужно использовать $ scope. $ Apply (), если вы хотите внести какие-либо изменения в значение области вне контроля angularjs, например, обработчика событий jquery / javascript.
Демо: скрипка
источник
angular.element("#scope")
не работает, хотяangular.element($("#scope"))
работает, вам также нужен jqueryПрошло некоторое время с тех пор, как я опубликовал этот вопрос, но, учитывая мнения, которые он все еще получает, вот еще одно решение, с которым я столкнулся за последние несколько месяцев:
Приведенный выше код в основном создает функцию с именем ,
safeApply
что Кальесы$apply
функция (как указано в ответе Аруна) , если и только Угловая в настоящее время не проходят на$digest
сцене. С другой стороны, если Angular в настоящее время что-то переваривает , он просто выполнит функцию как есть, так как этого будет достаточно, чтобы сообщить Angular о внесении изменений.Многочисленные ошибки возникают при попытке использовать
$apply
функцию, пока AngularJs находится на ее$digest
стадии. ПриведенныйsafeApply
выше код является безопасной оболочкой для предотвращения таких ошибок.(примечание: я лично предпочитаю
safeApply
использовать функцию$rootScope
для удобства)Пример:
Демо: http://jsfiddle.net/sXkjc/227/
источник
Другой способ сделать это:
источник
мы можем назвать это после загрузки
http://jsfiddle.net/gentletech/s3qtv/3/
источник
Я давно не задавал этот вопрос, но вот ответ, который не требует jquery:
источник
Вот решение для многократного использования: http://jsfiddle.net/flobar/r28b0gmq/
источник
Вы также можете попробовать:
источник
Принятый ответ великолепен. Я хотел посмотреть, что происходит с областью действия Angular в контексте
ng-repeat
. Дело в том, что Angular создаст дополнительную область для каждого повторяющегося элемента. При вызове метода, определенного в оригинале$scope
, он сохраняет свое исходное значение (из-за закрытия javascript). Однако этоthis
относится к вызывающей области / объекту. Это работает хорошо, до тех пор , пока вы ясно , когда$scope
иthis
те же , и когда они различны. НТНВот скрипка, иллюстрирующая разницу: https://jsfiddle.net/creitzel/oxsxjcyc/
источник
Я новичок, извините, если это плохая практика. Исходя из выбранного ответа, я выполнил такую функцию:
Я использую это так:
Кстати извините за мой английский
источник
доступ к значению области
Предположим, что programRow.StationA secondaryTime - это массив объектов
источник
Нам нужно использовать Angular Js, встроенную в функцию $ apply, для доступа к переменным области видимости или функциям вне функции контроллера.
Это можно сделать двумя способами:
| * | Метод 1: Использование идентификатора:
| * | Метод 2: Использование init ng-controller:
источник