2014-09-03 2 views
1

Я начинаю с AngularJs, но теперь я использовал и понял, как AngularJs работает совсем немного.
Вещь, о которой я хочу спросить, это несколько строк в директивной документации ngModel.Что означает документация директивы ngModel?

Эти линии являются:

Примечание: ngModel будет пытаться привязать к свойству данного вычислив выражение на текущей области. Если свойство еще не существует в этой области, оно будет создано неявно и добавлено в область.

Я не понимаю, что они пытаются сказать. Я знаю, что директива ngModel связывает свойство с элементами управления input, select и textarea. Так же, как очень простой код ниже:

Name: <input type="text" ng-model="myName"> 
{{myName}} 

Так, может кто-нибудь придумать с любым другим точным примером, который помогает мне понять эти строки?

ответ

2

ngModel - это стандартный способ, которым Angular связывает свойство области (обычно объявленное в контроллере) с пользовательским интерфейсом.

Таким образом, как правило, контроллер создается с собственностью, объявленной внутри:

angular.controller('Ctrl', function($scope) { 

    $scope.myProperty = ''; 

}); 

И вы бы привязать его к UI, как это:

<div ng-controller="Ctrl"> 
    <input type="text" ng-model="myProperty"/> 
</div> 

В этом примере $scope является контекстным в UI в элементе div, потому что атрибут ng-controller связывает Ctrl с этим элементом.

Однако Угловая позволяет быть немного ленивый, а также и не беспокоить определение myProperty в контроллере:

angular.controller('Ctrl', function($scope) { 

}); 

И все же использовать его в интерфейсе:

<div ng-controller="Ctrl"> 
    <input type="text" ng-model="myProperty"/> 
</div> 

В этом случае Angular будет неявно (динамически) создавать myProperty на $scope. Это можно использовать в пользовательском интерфейсе внутри области ng-controller.

Это может использоваться для UI только свойства, о которых вы не хотите беспокоиться. Например, если вы хотите скрыть/показать что-то на основе взаимодействия пользователя.

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

+0

спасибо за ваш такой точный и пояснительный ответ. ОК. что произойдет, если я использую только {{myName}}, который фактически выполняет директиву в DOM и не использует вообще директиву ng-model. Будет ли он также делать то же самое? – Rohaan

+0

Нет, это привязка к директиве 'input', которая вызывает создание свойства. Насколько я могу судить ... http: //plnkr.co/edit/FN9AeEuiimbtHr3iTO7R? P = preview –

+0

Однако другие угловые директивы действуют так же. Таким образом, это не только функция, которую мы видим с помощью 'input'. –

1

У вас есть контроллер с $scope.
Вы можете инициализировать Ваш $ масштаб со значениями (например.):

$scope.myName= 'test'; 

И тогда вход будет иметь значение по умолчанию test.

Name: <input type="text" ng-model="myName"> 
{{myName}} 

Вы можете выбрать не инициализировать свои возможности со значением, а затем $scope.myName будет создан за кулисами и связан со значением по умолчанию.

+0

благодарит за ваш быстрый и точный ответ. Можете ли вы сказать мне, если я использую {{myName}}, который является наблюдающей директивой, тогда в этом случае он будет делать то же самое. Я имею в виду, что он будет динамически создавать свойство для области видимости? – Rohaan

+0

Да. Когда ваш контроллер запускается, у вас есть место, где вы можете запускать материал. Объем по умолчанию по умолчанию не имеет. Если вы хотите добавить модель в свою область действия, это ваше место. Если вы не добавляете свойства в свою модель, они автоматически добавляются директивой ng-model. –

0

Давайте разберем это вниз:

Note: ngModel will try to bind to the property given by evaluating the expression 
on the current scope. If the property doesn't already exist on this scope, it 
will be created implicitly and added to the scope. 

1) ngModel будет пытаться привязать к свойству данного вычислив выражение в текущей области.

Так что если у вас есть элемент:

<input ng-model="theProperty"> 

Этот элемент будет иметь объем:

var theScope = element.scope() 

В большинстве случаев это Прицел доступ в конструкторе контроллера ... Теперь, давайте вернуться к заявлению:

will try to bind to the property given... on the current scope. 

Обратите внимание, что он говорит: "попробовать ", потому что возможно, что текущая область действия содержит свойство или нет. Потому что угловые сделают примерно так:

theScope['theProperty'] = the_inputs_value; 

Когда свойство не существует, свойство создается. Таким образом, это объясняет следующее утверждение.

If the property doesn't already exist on this scope, 
it will be created implicitly and added to the scope. 
+0

приятно сломать :) Это также действительно помогло мне – Rohaan

+0

, пожалуйста, вы тоже можете подняться. Благодарю. –

+0

также, этот сайт имеет множество примеров ... может быть полезен для новичков ... ngtutorial.com/guide –

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