当我获得要取消表单的名称时,我试图从 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>