2015-11-12 2 views
0

Я новичок в Угловом. Пожалуйста, рассмотрите следующий фрагмент кода.Когда переменная области видимости создается в AngularJS?

 <form name="newEventForm"> 
      <fieldset> 
       <label for="eventName">Event Name:</label> 
       <input id="eventName" required ng-model="event.name" type="text" placeholder="Name of your event..."> 


      <button ng-click="saveEvent(event, newEventForm)" type="submit" class="btn btn-primary">Save</button> 
      <button ng-click="cancelEdit()" type="button" class="btn btn-default">Cancel</button> 
     </form> 

Мой вопрос: зачем нам передавать аргумент события функции saveEvent? Не использует ли ng-model auto генерировать переменную event.name через двустороннюю привязку на угловой стороне? например

<form name="newEventForm"> 
       <fieldset> 
        <label for="eventName">Event Name:</label> 
        <input id="eventName" required ng-model="event.name" type="text" placeholder="Name of your event..."> 


       <button ng-click="saveEvent(newEventForm)" type="submit" class="btn btn-primary">Save</button> 
       <button ng-click="cancelEdit()" type="button" class="btn btn-default">Cancel</button> 
      </form> 

В этой второй версии кода я явно не вводил событие в качестве параметра функции. Однако при нажатии submit, это код для saveEvent

$scope.saveEvent = function(newEventForm) 
    { 
     alert(1); 
     alert(newEventForm.$valid); 
     if(newEventForm.$valid) 
     { 
      window.alert('event ' + event.name + ' saved!'); 
     } 
    } 

и событие не определено. Разве это не должно быть определено? Извините, если вопрос является вопросом новичка. Просто пытаюсь понять, как объекты области создаются с помощью ng-модели и как работает двусторонняя привязка. Благодаря !

UPDATE

Doh, я уже использовал $ scope.event. Тогда это работает. Спасибо, как я уже сказал, это новое, и это только осенило меня после того, как я задал вопрос :)

+0

не использовать событие как глобальный объект, а вместо него вместо объекта $ scope (в вашем контроллере): '$ scope.event.name' – devqon

+0

yes! ха-ха, я просто понял это сам. Тем не менее многие благодарны :) –

ответ

1

В представлении создается переменная события в соответствующей области действия, используйте $ scope.event.name. Удача

0

На самом деле все переменные или модели, указанные в html, являются переменными scope.

Пример

<div ng-controller="myController" ng-init="name='Hello World'"> 
    {{name}} 
    <button ng-click="myFn(name)"> Click Me </button> 
</div> 

В этом примере, я инициировал переменную name. Это фактически переменная области. Этот код действительно понравится

myApp.controller("myController", function($scope){ 
    $scope.name = "Hello World"; 

    $scope.myFn = function(param){ 
     // here you can see that your variable name passed from html is same as your scope variable 
     if(param == $scope.name){ 
      alert("Yes, two are equal !!!"); 
     } 
    } 
}); 

Это два одинаковых. Вы можете использовать html или js.

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