AngularJS - form inside ng-repeat在控制器中未定义
AngularJS - form inside ng-repeat undefined in controller
我试图访问窗体对象在我的控制器。表单位于ng-repeat块内,它有它的动态名称,我应该能够访问它,因为v1.3。
js:
var app = angular.module('app', []);
app.controller('AppCtrl', ['$scope', function($scope) {
$scope.forms = [0];
$scope.testForm = function() {
if($scope.form0 == undefined) {
$scope.test = 'Form is NOT defined';
} else {
$scope.test = 'Form is defined';
}
}
}])
html: <body ng-app="app">
<div ng-controller="AppCtrl">
<div ng-repeat="form in forms" ng-init="formName = 'form' + $index">
form name should be {{formName}}
<form name="{{formName}}">
<input type="text" name="field" />
</form>
</div>
<button ng-click="testForm()">Check if form exists</button>
<p ng-bind="test"></p>
</div>
</body>
但是在我的控制器$scope。form0是未定义的-点击"检查表单是否存在"后,我得到"表单未定义"的消息。即使我给它一个静态的名字(<form name="form0">
)我仍然没有定义。当我从ng-repeat循环中取出form时,它工作得很好。
知道为什么没有设置吗?
上面的例子:https://plnkr.co/edit/Fvy5LdIO0H1vCS9wYR0U?p=preview
提前感谢!
这是因为ng-repeat
正在创建孤立的子作用域,form0
在子作用域中并且从父(控制器的作用域)不可见。
所以解决方案是将它传递给父节点。然而,我们不能在ng-init中这样做,因为那时表单控制器还没有初始化。
我能想到的一种方法是使用自定义指令将formController绑定到指定的作用域。
app.directive("form",function($parse){
return{
restrict:"E",
priority:-1,
link:function(scope,ele,attrs){
var targetScope = $parse(attrs.bindToScope)(scope);
if(targetScope){
targetScope[attrs.name] = scope[attrs.name];
}
}
}
})
,这样我们就可以告诉表单将控制器绑定到我们指定的作用域。
<form name="{{formName}}" bind-to-scope='$parent' >
<input type="text" name="field" />
</form>
相关文章:
- $routeParams在传递到新视图时未定义&控制器
- Http服务工厂将未定义的返回到Angular中的控制器
- 角度指令控制器:参数不是函数,未定义
- 注入应用程序的角度控制器未定义
- 未定义的控制器AngularJS
- 从服务返回值时$scope控制器的变量是未定义的
- 尝试通过 Angular 控制器使用 Google Geocode API 进行地理编码,值未定义
- scope() 函数在 AngularJS 控制器中返回未定义
- angular.js:13424 ReferenceError:在控制器中使用工厂方法时未定义索引
- AngularJS指令中的作用域未定义,控制器中有ajax请求
- 从html调用angularjs控制器中的一个函数,但未定义范围变量
- 未定义角度控制器
- Angularjs:由控制器中的函数返回的变量是“未定义的”
- $scope.form.$error在Angular控制器中未定义
- 在一个页面上引导多个角度应用程序会导致控制器未定义错误
- AngularJS错误 - “控制器未定义”或“未定义函数”
- 测试角度控制器:未定义控制器
- 控制器未定义
- AngularJS + ASP控制器未定义
- 控制器未定义AngularJS