Угловая нг-смена не вызывающего кода. Я использую неправильную модель
Я создаю приложение, используя генераторы MEAN.js и учебник, который я нашел в Интернете. Здесь у меня есть средство выбора даты в одном из моих угловых представлений. Сейчас я бы хотел, чтобы директива ng-change была распознана и что-то сделала. В тот момент, когда я изменяю дату, мое тестовое предупреждение, показанное здесь, не вызывается.
<div class="form-group">
<label class="control-label" for="statusdate">Status Date</label>
<div class="controls">
<input type="date" ng-change="alert('something')" data-ng-model="statusDate" id="statusdate" class="form-control">
</div>
</div>
Может кто-нибудь помочь? Я новичок в Angular.
Кроме того, я где-то читал, что это может быть потому, что я использовал data-ng-модель, а не ng-модель. Может ли это быть так? Если так, то в чем разница между ними?
3 ответа
Вы выполняете метод, который не существует в контроллере.
Попробуйте создать это так:
$scope.alert = function(msg) {
alert(msg);
};
Ах, проблема в том, что у вас нет контекста, который, как вы думаете, у вас есть.
Почти везде в Javascript корень всех замыканий window
, который содержит alert()
,
Почти везде, но не везде. Не в том контексте, в котором это ng-change()
оценивается. Вы можете исправить это, например, создав контроллер, который добавил значение alert
к $scope
и указывая на window.alert
,
<div class="form-group">
<label class="control-label" for="statusdate">Status Date</label>
<div class="controls" ng-controller="myController">
<input type="date" ng-change="alert('something')" data-ng-model="statusDate" id="statusdate" class="form-control">
</div>
</div>
А затем в Javascript:
angular.module("MyApp")
.controller("myController", ['$scope', '$window', function($scope, $window) {
$scope.alert = $window.alert;
}]);
Изменить: вы можете использовать только window
вместо $window
, так как window
доступно здесь, но это сделает ваш код более сложным для тестирования в долгосрочной перспективе.
Проблема в том, что ng-change ожидает выражение, но вы даете ему имя функции alert() для отображения строки "что-то", и, следовательно, оно не знает, что делать.
Возможное решение этой проблемы - добавить это поверх вашего HTML-файла.
<script>
angular.module('Your_App_Name', [])
.controller('YourControllerName', ['$scope', '$window', function($scope, $window) {
$scope.alert = function(message) {
$window.alert(message);
};
}]);
</script>
Обратитесь к документации для получения дополнительной информации о том, как использовать ng-change https://docs.angularjs.org/api/ng/directive/ngChange
Обратитесь к разнице между ч / б ng-моделью и data-ng-моделью, чтобы понять разницу между data-ng-моделью и ng-моделью. Они оба должны работать нормально.