1

Я создаю приложение, использующее генераторы MEAN.js, и учебник, который я нашел в Интернете. Здесь у меня есть дампикер в одном из моих угловых взглядов. На данный момент я хотел бы, чтобы директива ng-change была признана и что-то сделала. В тот момент, когда я вношу изменения в дату, мое тестовое предупреждение, показанное здесь, не вызвано.Угловой 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-model, а не ng-model. Может ли так быть? Если да, то в чем разница между ними?

ответ

2

Выполняется метод, который не существует в контроллере.

Попробуйте создать его так:

$scope.alert = function(msg) { 
    alert(msg); 
}; 
+0

Посмотрел больше похоже на это, но да, ваше предложение сработало: $ scope.alert = function() { alert(); }; – user2623706

3

Ах, эта проблема, вы не имеете контекст вы думаете, что вы делаете.

Практически везде в 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; 
}]); 

Edit: можно использовать только window вместо $window, потому что window доступен здесь, но это будет сделать код более трудно проверить в в долгосрочной перспективе.

0

Проблема: 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> 

Обратитесь к документации для получения дополнительной информации о том, как использовать нг-изменения https://docs.angularjs.org/api/ng/directive/ngChange

Обратитесь к difference b/w ng-model and data-ng-model к понять разницу между data-ng-model и ng-model. Они должны хорошо работать.

+0

Я хотел бы указать на две проблемы с вашим ответом. Во-первых, вы не объясняете _why_ 'alert()', что в противном случае почти повсеместно известно, здесь неизвестно; во-вторых, вы «завернули» функцию оповещения по нет (очевидной) причине. С другой стороны, ваше использование '$ window' поучительно, поэтому я собираюсь украсть его для моего ответа. [злой смех] – Malvolio