2015-07-07 13 views
5

Làm cách nào để chuyển giá trị đã chọn cho hàm vuejs? v-model sẽ không giúp tôi đoán.Vượt qua giá trị đã chọn cho hàm vuejs

tôi cần phải đặt giá trị cho bộ lọc sau item: items | orderBy sortKey reverse nơi reversesortKey là những giá trị năng động.

html

<select class="sort-filter" v-on="change: sortBy(???)"> 
    <option value="title asc">Title (A-Z)</option> 
    <option value="title desc">Title (Z-A)</option> 
    <option value="price asc">Price (Min. - Max.)</option> 
    <option value="price desc">Price (Max. - Min.)</option> 
</select> 

js

methods: { 
    sortBy: function (sortKey) { 
     console.log(sortKey) 
    } 
    } 

Trả lời

16

Bạn có nhiều cách để làm điều đó.

Edit: Cải thiện 2)

Có thể sử dụng v-mô hình giống như trong 2) nhưng thay vì sử dụng các giá trị trực tiếp trong bộ lọc orderBy của bạn, bạn có thể sử dụng computed proprieties

computed: { 
    sortKey: { 
     get: function() { 
      return this.sorting.split(' ')[0]; // return the key part 
     } 
    }, 
    sortOrder: { 
     get: function() { 
      return this.sorting.split(' ')[1]; // return the order part 
     } 
    } 
} 

Bằng cách này, sortKey và sortOrder sẽ có sẵn như một sự bình thường trong bạn lọc:

v-repeat="items | orderBy sortKey sortOrder" 

1) Sử dụng sự kiện javascript:

Nếu bạn không chỉ định bất kỳ thông số, các đối tượng sự kiện có nguồn gốc sẽ được chuyển tự động

<select class="sort-filter" v-on:change="sortBy"> 

Sau đó bạn có thể sử dụng nó như thế này:

methods: { 
    sortBy: function(e) { 
     console.log(e.target.value); 
    }, 
} 

2) Sử dụng v-model

Bạn có thể thêm chỉ thị v-model

<select name="test" v-model="sorting" v-on:change="sortBy"> 

Bằng cách này giá trị sorting sẽ được cập nhật trên mọi thay đổi.

Bạn có thể thêm giá trị này trong đối tượng dữ liệu của bạn ViewModel để được rõ ràng hơn:

data: { 
    sorting: null // Will be updated when the select value change 
} 

Sau đó bạn có thể truy cập các giá trị như trong phương pháp của bạn:

methods: { 
    sortBy: function() { 
     console.log(this.sorting); 
    }, 
} 

Nếu bạn chỉ cần để cập nhật giá trị sortKey, phương pháp này thậm chí không cần thiết.

3) cách kỳ lạ khác

Bạn dường như có thể sử dụng giá trị mô hình của bạn như một tham số.

<select name="test" v-model="sortKey" v-on:change="sortBy(sortKey)"> 

Điều này có hiệu quả nhưng tôi không thực sự thấy điểm.

methods: { 
    sortBy: function(sortKey) { 
     console.log(sortKey); 
    }, 
} 
+0

Cảm ơn bạn rất nhiều, tôi sẽ thử nó vào ngày mai tại văn phòng. Lý do tôi không sử dụng mô hình v là vì giá trị chứa hướng sắp xếp là tốt, như asc hoặc desc. Nếu tôi sử dụng vue' v-model' sẽ cố gắng sắp xếp các kết quả dựa trên ví dụ như thuộc tính 'title asc' không tồn tại, vì vậy tôi muốn gửi giá trị đã chọn đến một hàm, tách nó và sử dụng tiêu đề làm thuộc tính sắp xếp và asc hoặc desc như hướng. Tôi hy vọng nó có ý nghĩa những gì tôi đang nói. Cảm ơn bạn. – rmagnum2002

+0

Ok, tôi nghĩ rằng tôi hiểu, tôi sẽ chỉnh sửa câu trả lời của mình và thêm một giải pháp khả thi khác. – Needpoule

+0

Một điều cần thêm, 'sortOrder' phải là một kiểu boolean, true/false, vì vậy tôi phải kiểm tra xem sortOrder có bằng asc hay không: ' return this.sorting.split ('') [1] === 'asc '? false: true' nó sẽ không chấp nhận các giá trị khác với tham số boolean cho 3d trong bộ lọc. Cảm ơn bạn. – rmagnum2002

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