Как получить доступ к переменной AngularJS из шаблона script

Мой контроллер:

$scope.totals = totals;

Мой шаблон (работает как ожидается для html-инъекции):

{{totals}}

Но мне нужно получить доступ к переменной totals в script в шаблоне, например:

<script>
  var totals = ????;
  // do stuff with totals
</script>

Я пробовал $scope.totals, $totals, {{totals}} и т.д., безрезультатно. Я был бы признателен за понимание, спасибо!

EDIT:

Следующее - это jsfiddle моего контроллера и шаблона. Внутри шаблона я хочу вставить script, который использует переменную $scope.totals.

http://jsfiddle.net/38CrC/

Ответы

Ответ 1

Ответ OP:

В итоге мне пришлось использовать директиву, чтобы найти значение, которое я хотел. В контроллере, который установил значение, которое я хотел использовать, я добавил директиву, чтобы он выглядел так:

'use strict';

angular.module('AdminApp')
  .controller('AdminEventsCtrl', function ($scope, collection) {
    $scope.totals = collection;
  }).directive('foo', function(){
    return {
        restrict: 'A',
        link: function(scope, elem, attrs){
            //Use scope.totals here
        }
    }
});

В моем шаблоне у меня было объявление:

<div foo></div>

Это дало мне возможность делать то, что мне нужно, с итоговыми значениями переменных.

Особая благодарность @jvandemo за помощь в получении этого ответа.

Ответ 2

Прежде всего, идея AngularJS заключается в подобных ситуациях.

В терминах AngularJS вам, вероятно, будет лучше переосмыслить ваше приложение и использовать директиву для инкапсуляции кода, который вы сейчас пишете в тегах script.

Однако, если говорить, есть способ получить доступ к области, подобной этой:

var $element = $('#elementId');

var scope = angular.element($element).scope();

Более подробную информацию вы можете прочитать .

Но, как сказано, в большинстве случаев это не рекомендуется.

Надеюсь, что это поможет!


Обновление после публикации OP jsFiddle:

Я создал рабочий jsFiddle для вашего удобства в http://jsfiddle.net/jvandemo/hYnBa/1/

Так как ваш пример имеет простой div с атрибутом ng-controller, вы можете получить доступ к этой области следующим образом:

<script>
    $(document).ready(function(){
        var $element = $('div[ng-controller="AdminEventsCtrl"]');
        var scope = angular.element($element).scope();
        console.dir(scope);
    });
</script>

Вот что происходит:

  • Вы выбираете элемент (в этом случае с помощью jQuery)
  • Вы переносите элемент как элемент AngularJS (выставляя дополнительные методы для элемента)
  • Вы вызываете метод scope() для элемента
  • Затем вы можете получить доступ к свойствам области, например. scope.totals

Надеюсь, что это поможет!