2

オンラインで見つけた MEAN.js ジェネレーターとチュートリアルを使用してアプリを作成しています。ここでは、Angular ビューの 1 つに日付ピッカーがあります。今のところ、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が初めてです。

また、ng-modelではなくdata-ng-modelを使用したことが原因である可能性がある場所を読みました。これは事実でしょうか?もしそうなら、2つの違いは何ですか?

4

3 に答える 3

3

ああ、問題は、あなたが思っている文脈を持っていないことです。

Javascript のほぼすべての場所で、すべてのクロージャのルートは でありwindow、これには が含まれていますalert()

ほとんどどこにでもありますが、どこにでもあるわけではありません。それng-change()が評価されるコンテキストではありません。たとえば、 に呼び出される値を追加するコントローラを作成し、それを にポイントすることで修正できalertます。$scopewindow.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。ここでは が利用可能ですが、長期的にはコードのテストが難しくなります。

于 2015-07-01T03:26:12.597 に答える
2

コントローラーに存在しないメソッドを実行しています。

次のように作成してみてください。

$scope.alert = function(msg) {
    alert(msg);
 };
于 2015-07-01T03:25:26.637 に答える
0

問題は ng-change が式を期待していることですが、文字列 'something' を表示するために関数名 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

data-ng-model と ng-model の違いを理解するには、b/w ng-model と data-ng-model の違いを参照してください。どちらも正常に動作するはずです。

于 2015-07-01T03:33:30.353 に答える