带有ng-switch的角形

bla*_*jid 7 javascript forms angularjs ng-switch

当我得到de form的名字时,我正试图从控制器的范围中获取一个表单对象.它工作正常,但如果我使用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>
Run Code Online (Sandbox Code Playgroud)

控制器

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

  $scope.showScope = function(){
    console.log($scope);
  };
});
Run Code Online (Sandbox Code Playgroud)

如果我删除了ng-switch,我可以从$ scope中看到属性"theForm"作为形式obj.

知道如何做到这一点.我不希望这两个表单具有不同的名称并使用ng-show.

以下是"不工作" http://plnkr.co/edit/CnfLb6?p=preview的示例

Mic*_*ley 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>
Run Code Online (Sandbox Code Playgroud)