我是新手Angular,我有这个简单的形式:
<form ng-submit="add()">
<input type="text" name="field">
<input type="submit" value="Submit">
</form>
Run Code Online (Sandbox Code Playgroud)
我想把input[name="field"]价值作为参数add().有没有办法做到这一点?
到目前为止我所做的是分配ng-model="field"输入和内部add()查找$scope.field.
在控制器中,我有一个项目数组和add()功能.这$scope.field是一个中间步骤,以获得add()我不应该需要的输入值.
我错过了什么或者是Angular的方式吗?
jlb*_*jlb 20
我会稍微修改TheHippo的答案并field作为参数传递给add().这更像是代码设计的选择,但我认为它可以提供更大的灵活性和更好的测试.
HTML:
<div ng-controller="MyFormController">
<form ng-submit="add(field)">
<input type="text" name="field" ng-model="field" />
<input type="submit" value="Submit" />
</form>
</div>
Run Code Online (Sandbox Code Playgroud)
JS:
app.controller('MyFormController', ['$scope', function(scope) {
scope.add = function(field) { // <-- here is you value from the input
// ...
};
}]);
Run Code Online (Sandbox Code Playgroud)
还有一点注意事项:如果您在线跟踪大多数AngularJS教程,其中有一些列表被管理,并且新项目被添加到该列表中,您几乎总会看到其中一个属性倾向于"徘徊"(它们经常出现)名为'newItem'等.在某种程度上,这是 AngularJS方式:)
The*_*ppo 12
对您做一个小改动HTML:
<form ng-submit="add()">
<input type="text" name="field" model="field">
<input type="submit" value="Submit">
</form>
Run Code Online (Sandbox Code Playgroud)
在包含表单的控制器(/指令)中:
app.controller('MyFormController', ['$scope', function(scope) {
scope.add = function() {
scope.field // <-- here is you value from the input
};
}]);
Run Code Online (Sandbox Code Playgroud)
这是角度最简单,最有效的方法.
您可以开始考虑编写一个自己的指令/服务,它将执行您想要存档的内容,但是根据您的其余代码,这可能是最简单和最短的方式.
这是如何做到的:
form.html
<form ng-submit="create(product)">
<input ng-model="product.name" class="u-full-width" type="text" id="name">
<input ng-model="product.price" class="u-full-width" type="number" id="price">
<input class="button-primary" type="submit" value="Submit">
</form>
Run Code Online (Sandbox Code Playgroud)
controller.js
.controller('productCtrl', function($scope) {
$scope.create = function(product){
console.log(product)
};
})
Run Code Online (Sandbox Code Playgroud)
我不会说这是Angular的方式,但它是如何发展的,而且我认为我要告诉你的更清洁.
您可以使用form指令,并将输入值传递给您的add方法.不幸的是,ngForm要求你使用ngModel,所以它是一种洗涤方式.
<div ng-app>
<form name="myForm" ng-submit="add(myForm.field.$viewValue)" ng-controller="x">
<input type="text" ng-model="field" name="field" required>
<input type="submit" value="Submit">
</form>
</div>
Run Code Online (Sandbox Code Playgroud)
ngForm根据字段名称而不是模型属性进行操作,因此如果您愿意,您可以使用ngModel输入中的指令创建并隐藏它们,这样它们就不会"妨碍",可以这么说:
<input type="text" name="field" ng-model="$$ignore.field" required>
Run Code Online (Sandbox Code Playgroud)
也就是说,你可能最好只使用$ scope.:)