Как получить доступ к переменной 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
Надеюсь, что это поможет!