7

フォームの名前を取得するときに、コントローラーのスコープからフォーム オブジェクトを取得しようとしています。正常に動作しますが、ng-switch でフォームを作成すると、フォームがスコープに表示されません。

景色

<body ng-controller="MainCtrl">

    <div ng-switch on="type">
      <form name="theForm" ng-switch-when="1">
        <label>Form 1</label>
        <input type="text"/>
      </form>
      <form name="theForm" ng-switch-when="2">
        <label>Form 2</label>
        <input type="text"/>
        <input type="text"/>
      </form>

    </div>

    <button ng-click="showScope()">Show scope</button>
</body>

コントローラー

app.controller('MainCtrl', function($scope) {
  $scope.type = 1;

  $scope.showScope = function(){
    console.log($scope);
  };
});

ng-switch を削除すると、$scope から "theForm" プロパティがフォーム obj として表示されます。

それを行う方法についてのアイデア。2 つのフォームに異なる名前を付けて ng-show を使用したくありません。

これが「機能しない」例です http://plnkr.co/edit/CnfLb6?p=preview

4

1 に答える 1

9

これは、ngSwitch新しいスコープを作成するためです。($$childHead取得したスコープの値を見ると、その中にあるconsole.logことがわかりますtheForm。これがngSwitchスコープです)。

フォームが常に同じ名前である場合は、単にngSwitches をフォーム内に置くことができます:

<form name="theForm">
  <div ng-switch on="type">
    <div ng-switch-when="1">
      <label>Form 1</label>
      <input type="text"/>
    </div>
    <div ng-switch-when="2">
      <label>Form 2</label>
      <input type="text"/>
    </div>
  </div>
</form>
于 2013-05-03T21:34:15.210 に答える