2013-05-16 30 views
17

Tôi mới đến Angular, và tôi có hình thức đơn giản này:luận Pass để ng-nộp

<form ng-submit="add()"> 
    <input type="text" name="field"> 
    <input type="submit" value="Submit"> 
</form> 

Tôi muốn có giá trị input[name="field"] như một tham số của add(). Có cách nào để làm điều đó?

Điều tôi đã làm cho đến thời điểm này là chỉ định ng-model="field" trong mục nhập và trong add() tìm kiếm $scope.field.

Trong bộ điều khiển, tôi có một loạt các mục và chức năng add(). Các $scope.field được treo xung quanh như một bước trung gian để có được giá trị của đầu vào để add() mà tôi cần phải.

Tôi có thiếu thứ gì đó hay theo cách này của Angular?

Trả lời

18

Tôi sẽ sửa đổi câu trả lời của TheHippo một chút và vượt qua field làm đối số cho add(). Đây là một lựa chọn thiết kế mã hơn, nhưng tôi nghĩ nó mang tính linh hoạt hơn và thử nghiệm tốt hơn.

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> 

JS:

app.controller('MyFormController', ['$scope', function(scope) { 
    scope.add = function(field) { // <-- here is you value from the input 
    // ... 
    }; 
}]); 

Và một lưu ý nhỏ: Nếu bạn làm theo nhất AngularJS hướng dẫn trực tuyến, nơi có một số danh sách được quản lý, và các mặt hàng mới được thêm vào mà danh sách, bạn sẽ hầu như luôn luôn nhìn thấy một trong những thuộc tính có xu hướng "treo xung quanh" (chúng thường được đặt tên là 'newItem' vv). Theo cách này, cách AngularJS :)

+0

Điều này vẫn liên kết giá trị đầu vào với 'scope.field'. – TheHippo

+0

Bạn nói đúng, nhưng tôi không hoàn toàn chắc chắn nó khác với giải pháp của bạn như thế nào. – jlb

+0

Tôi thích cách tiếp cận này nhiều nhất. – jviotti

12

Thực hiện một thay đổi nhỏ cho bạn HTML:

<form ng-submit="add()"> 
    <input type="text" name="field" model="field"> 
    <input type="submit" value="Submit"> 
</form> 

Trong bộ điều khiển (/ chỉ) chứa các hình thức:

app.controller('MyFormController', ['$scope', function(scope) { 
    scope.add = function() { 
    scope.field // <-- here is you value from the input 
    }; 
}]); 

Đây là đơn giản nhất và có ý định cách bạn có thể làm điều này trong góc cạnh.

Bạn có thể bắt đầu xem xét một chỉ thị/dịch vụ riêng sẽ làm những gì bạn muốn lưu trữ, nhưng tùy thuộc vào phần còn lại của mã, đây có thể là cách dễ nhất và ngắn nhất.

+0

trường này được liên kết với 'mô hình' hoặc' tên'? – Sekai

+0

@Sekai Nó bị ràng buộc với mô hình. – SuperCow

5

Tôi sẽ không nói đó là cách của Angular, nhưng nó là như thế nào, và tôi nghĩ rằng những gì tôi sắp nói với bạn.

Bạn có thể sử dụng form directive và chuyển giá trị của đầu vào cho phương thức add của mình. Thật không may ngForm yêu cầu bạn sử dụng ngModel, vì vậy nó là loại rửa.

http://jsfiddle.net/unsWy/

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

ngForm công trình tắt của tên trường, không tính mô hình của bạn, vì vậy nếu bạn muốn, bạn có thể sáng tạo với các ngModel chỉ thị trên đầu vào của bạn và giấu chúng đi để họ không phải "theo cách của bạn" để nói:

<input type="text" name="field" ng-model="$$ignore.field" required> 

Điều đó nói rằng, có lẽ bạn nên sử dụng phạm vi $ như dự định. :)

2

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> 

JS:

<script> 
function MyFormController($scope) { 
    $scope.add= function(field) { 
     alert(field) 
    } 
} 
</script> 

Lưu ý: nếu 'lĩnh vực' là một dấu ngoặc kép chuỗi sử dụng ng-nộp = "thêm ('lĩnh vực') "

0

Tôi không chắc chắn lý do. Nhưng tôi phải sử dụng 'điều này' để làm cho nó hoạt động.

Html:

<div ng-controller="MyFormController"> 
    <form ng-submit="add()"> 
    <input type="text" name="field" ng-model="field" /> 
    <input type="submit" value="Submit" /> 
    </form> 
</div> 

JS:

app.controller('MyFormController', ['$scope', function(scope) { 
    scope.add = function() { 
    console.log(this.field) // <-- this works for me 
    }; 
}]); 
-2

alert (document.getElementById ("bar") giá trị.); trong điều khiển những điều này làm việc cho tôi thnks trong View-> html việc hình thành tôi

6

Đây là cách nó được thực hiện:

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> 

controller.js

.controller('productCtrl', function($scope) { 
    $scope.create = function(product){ 
     console.log(product) 
    }; 
}) 
+0

bạn là người đàn ông! –

+0

@Julio làm thế nào tôi có thể nhận được ID của nút gửi với loại = gửi, nếu nó có một ID? – sajalsuraj

Các vấn đề liên quan