検索

ホームページ  >  に質問  >  本文

angular.js - 请问ng-click="alterCheck()"和ng-click="check=true"有什么不同?

<section ng-app="app" ng-controller="ctrl">
  <p ng-show="check && form.$invalid"></p>
  <form name="form" ng-submit="init()">
    <input type="text" ng-model="text" required/>
    <!--     <input type="submit" ng-click="alterCheck()"/> -->
    <input type="submit" ng-click="check=true"/>
  </form>
</section>
angular.module('app', [])
.controller('ctrl', function($scope){
  $scope.check = false;
  $scope.init2 = function() {
    $scope.text = '';
  }
  $scope.init = function() {
    $scope.init2();
    $scope.check = false;
  }
  $scope.alterCheck = function() {
    $scope.check = true;
  }
})

在实际项目中,使用 ng-click="check=true" 的方法会造成点击后 p 处于显示的状态,而 ng-click="alterCheck()" 则不会,请问这是什么原因呢?
上述代码无法复现我所说的现象。有什么额外的原因可能造成这一现象吗?

phpcn_u1582phpcn_u15822745日前614

全員に返信(2)返信します

  • 我想大声告诉你

    我想大声告诉你2017-05-15 17:05:45

    この例で説明したものと同様の問題を再現できます (以前にも遭遇したことがあり、さらに数回調べました):

    リーリー リーリー

    これは非常に単純なデモです。ng-repeat を使用して一連のラジオ ボタン ボックスを表示し、次の checkIndex: {{ checkIndex }} でクリック ボタンをクリックします。 は、選択したラジオ ボタンの $index を表示します。ここでオンライン デモをご覧ください: jsfiddleng-repeat显示一组单选框,通过点击点选按钮,在下面的checkIndex: {{ checkIndex }}中显示选中的单选框的$index。在线demo看这里:jsfiddle

    如果运行当前的代码,会发现,{{ checkIndex }}压根没有变化,无论你怎么使劲点,戳破鼠标也没用

    但如果template换成我注释掉的那部分代码,改用changeCheckIndex方法,{{ checkIndex }}就变化了。

    那么问题来了,如何造成这个局面的?我们还是要回到文档去(最近发现ng的文档还是不错的):

    我认为原因在于checkIndex = $index的写法,使得checkIndex是一个在每个template instance中独立$scope下的变量,并不是我们在Controller

    現在のコードを実行すると、{{ checkIndex }} がまったく変化していないことがわかります。マウスをどれだけ強く押しても無駄です

    ただし、template がコメントアウトしたコードの一部に置き換えられ、代わりに changeCheckIndex メソッドが使用される場合、{{ checkIndex }} は変化。 🎜 🎜そこで問題は、この状況がどのようにして起こったのかということです。まだドキュメントに戻る必要があります (最近、ng のドキュメントが非常に優れていることに気付きました): 🎜 🎜🎜 🎜🎜その理由は、 checkIndex = $index の書き方により、 checkIndex が各テンプレート インスタンスの独立した $scope 下の変数になるためだと思います。 Controller で定義したものではありません。 🎜🎜 🎜文書アドレス: ngRepeat🎜

    返事
    0
  • PHP中文网

    PHP中文网2017-05-15 17:05:45

    値のコピーとオブジェクト参照の違いについては、エラーを再現することができないため、大まかに説明することしかできません。

    返事
    0
  • キャンセル返事