当我获得要取消表单的名称时,我试图从 Controller 的范围中获取表单对象。
它工作正常,但是如果我使用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>

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

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

如果删除ng-switch,则可以从$ scope看到obj属性,即“theForm”属性。

任何想法如何做到这一点。我不想让这两种形式使用不同的名称并使用ng-show。

这是“不工作”的示例
http://plnkr.co/edit/CnfLb6?p=preview

最佳答案

这是因为ngSwitch创建了新的作用域。 (如果查看获得$$childHead'd的范围的console.log值,则可以看到其中的theForm。这是ngSwitch范围)。

如果表单始终具有相同的名称,则只需将ngSwitch es放入表单中:

<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>

10-04 22:06