2017-01-30 10 views
0
<select id = "email_templates" name = "email_templates" class="chosen-select input-md form-control" ng-change = "alert('template selected');"> 
<option value="0">No template selected</option> 
<option value="1">Template 1</option>              
</select> 

Я получаю следующее сообщение об ошибке.ng-change не работает, директива не может быть найдена

Error: [$compile:ctreq] Controller 'ngModel', required by directive 'ngChange', can't be found! 

Все остальные угловые указатели работают нормально. Что я делаю не так?

ответ

4

Вы должны иметь нг-модели для выбора,

<select id = "email_templates" ng-model="selected" name = "email_templates" class="chosen-select input-md form-control" ng-change = "alert('template selected');"> 
<option value="0">No template selected</option> 
<option value="1">Template 1</option>              
</select> 
+0

Там опечатка в нг-модели = "" выбрано». An ненужной кавычка :) – Roux

0

reuires нг-изменение нг-модели, так что используйте нг-модели с нг-изменения

<select id = "email_templates" ng-model="selected" name = 
    "email_templates" class="chosen-select input-md form-control" ng- 
     change = "alert('template selected');"> 
     <option value="0">No template selected</option> 
     <option value="1">Template 1</option>              
    </select> 
0

От ng-change documentation:

ngChange выражение вычисляется только при изменении значения входного вызывает новую Val ue, чтобы быть приверженными модели.

...

Обратите внимание, эта директива требует ngModel присутствовать.

ng-change создает наблюдател для переменной модели. Таким образом, вы должны добавить ng-model к своему выбору, чтобы указать Angular, для какой переменной вы наблюдаете изменения.

<select ng-model="selectedEmail" ng-change="alert('template selected');"> 
0

<select id = "email_templates" name = "email_templates" class="chosen-select input-md form-control" ng-change = "alert('template selected');"> 
 
<option value="0">No template selected</option> 
 
<option value="1">Template 1</option>              
 
</select>

вместо этого вы можете использовать ngClick опцию. По этому вопросу Responding to drop down selection change in angular without model binding

<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.1/angular.min.js"></script> 
 
<select id = "email_templates" name = "email_templates" class="chosen-select input-md form-control" > 
 
<option value="0">No template selected</option> 
 
<option value="1" ng-click="alert('template selected');">Template 1</option>              
 
</select>