2013-06-22 3 views
15

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

$scope.totals = totals; 

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

{{totals}} 

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

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

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

EDIT:

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

http://jsfiddle.net/38CrC/

+0

Это помогает http://stackoverflow.com/q/17960622/6521116 –

ответ

2

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 за помощь в получении этого ответа.

13

Прежде всего, идея заключается в AngularJS avond ситуации, как это.

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

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

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

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

Вы можете прочитать documentation для более подробной информации.

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

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


Update после 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

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

+0

Из вашего вопроса я получаю следующее за рамки: 'Ребенок {$ ID: "006", это: Ребенок, $$ слушателей: Object , $ родитель: Ребенок, $$ asyncQueue: Array [0] ...} $$ asyncQueue: Array [0] $$ childHead: Ребенок $$ childTail: Ребенок $$ слушателей: Object $$ NextSibling: нулевой $$ prevSibling: нулевые $$ обозреватели: Array [7] $ ID: "006" $ родитель: Ребенок это: Ребенок __proto__: Child' Нет, где я вижу значение, которое я хочу использовать. – reagan

+0

Убедитесь, что вы выбрали элемент, привязанный к области, которую вы хотите получить. AngularJS создает иерархию областей, и вам нужно выбрать правильный. Ваш текущий образец кода не позволяет мне видеть, какой селектор вам придется использовать. Если вы создадите plnkr, я тоже с удовольствием помогу вам в этом. – jvandemo

+0

http://jsfiddle.net/38CrC/ Существует сценарий того, с чем мне нужно работать (конечно, конечно). Надеюсь, это поможет. – reagan

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