2014-08-12 5 views
2

Я пишу простой пример AngularJS, который не имеет контроллера. Он просто использует глобальный контроллер/модель по умолчанию.AngularJS Model Location

<!DOCTYPE html> 
<html lang="en" ng-app=> 
    <body> 
    <input type="text" ng-model="firstName" placeholder="first name"> 
    <input type="text" ng-model="lastName" placeholder="last name"> 
    <br /> 
    <h2 ng-style=style>Welcome {{firstName + ' ' + lastName}}</h2> 
    <button ng-disabled="!(firstName.length && lastName.length)">Sign Up</button> 
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.js"></script> 
    </body> 
</html> 

, где хранятся firstName и lastName значения? Эта форма работает так, как ожидалось, поэтому работает двусторонняя привязка. Я пробовал просматривать объект window, и я ничего не видел там, где мог бы быть глобальный Угловой контроллер. Если бы я захотел представить эти значения, где бы «описать» их в этом примере?

UPDATE

Как я уже сказал, это работает, о чем свидетельствует this jsFiddle. Имя вычисляется правильно, и кнопка активируется только после того, как оба значения firstName и lastName имеют значения. Я также пытался использовать Batarang, и это не помогло. Он сказал мне, что пока еще не определена область действия, приложение все еще функционирует.

+0

Это '$ rootScope', просто поместите часы на' $ rootScope.firstName', вы увидите, что он обновляется. См. Консоль здесь http://plnkr.co/edit/dVDb3G?p=preview – PSL

+0

Похоже, вы задаете очень интересный вопрос: «Если я создаю приложение без имени модуля, где хранится область?». Я не знаю. 'angular.bootstrap(). get ('$ rootScope')' Получает область видимости, но значения там нет. – SimplGy

ответ

0

Попробуйте установить Batarang и проверки для себя, хотя я считаю, что эти два значения будут применены к $rootScope

0

Вы можете просмотреть объем использования ng-inspector. Это может не работать в js-скрипке, потому что они делают что-то с iframes, которые скрывают глобальные переменные, от которых зависит инспектор.

Я попробовал его на тестовом приложении с безымянным модулем, как в вашем примере, и он обнаруживает сферу как $rootScope 002

Из-за этого я предположил, и нашел, через эксперимент, что сфера приложения без объявленного имени модуля (и, вероятно, с одним, тоже), прикрепляется к любому узлу DOM, на котором установлена ​​директива ng-app.

Так что, если вы положили ng-app на html теге, это будет получить вам ваши возможности:

angular.element(
    document.getElementsByTagName('html')[0] 
).scope(); 

Использование JSFiddle усложнит это испытание, так как он делает IFrame материала и имеет несколько HTML и тела тегов. Попробуйте в изолированной среде, и это довольно прямолинейно.

0

В консоли выберите результат кадр и тип:

angular.element($('body')).scope().firstName 

Вы должны увидеть значение ПгвЬЫата. Что касается части «Если я хочу представить эти ценности», я считаю, что вы хотите сделать вызов ajax с этими значениями. Лучшее место для этого - подключить контроллер, где у вас будет прямой доступ к этим переменным, а затем вы можете использовать службу $ http для отправки на сервер.

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