2013-02-06 36 views
7

Tôi có ứng dụng được thiết lập nơi danh sách sản phẩm có thể được lọc theo màu bằng cách sử dụng đầu vào được chọn, tôi cũng có $routeprovider chuyển thông số màu này cho trang nếu nó có trong url.Góc, sử dụng bộ lọc đầu vào được chọn để cập nhật tuyến đường?

Điều tôi muốn làm bây giờ là cập nhật url/tuyến đường khi hộp chọn được thay đổi. Làm cách nào để liên kết thay đổi của lựa chọn với tuyến đường?

Trả lời

12

chọn có một tham số undocumented ng-thay đổi mà bạn có thể sử dụng để gọi một chức năng để thiết lập $location.path:

<select ... ng-model="color" ng-change="updatePath()"> 

Bộ điều khiển:

function MyCtrl($scope, $location) { 
    $scope.updatePath = function() { 
     $location.path(... use $scope.color here ...); 
    } 
} 
+0

Hoạt động như một nét duyên dáng, mặc dù vì lý do nào đó, hộp chọn sau đó sẽ chuyển thành không có gì được chọn thay vì màu đã chọn> –

+0

Trong bộ điều khiển của bạn, đặt $ scope.color thành thông số màu từ tuyến đường. Lưu ý rằng nếu bạn đang sử dụng một mảng các đối tượng để tạo danh sách lựa chọn của mình, bạn sẽ cần phải đặt $ scope.color để trỏ đến một phần tử của mảng đó. Xem [bài đăng này] (http://stackoverflow.com/questions/14297560/how-to-make-a-preselection-for-a-select-list-generated-by-angularjs) để biết thêm thông tin. –

+0

Tôi đang sử dụng các mảng sản phẩm để đưa vào danh sách lựa chọn, nhưng cũng đang sử dụng này (gạch dưới) để kéo tiêu đề màu độc đáo từ mảng 'code' $ scope.uniqueColours = function() { trở lại _. chuỗi giá trị ($ scope.products) \t \t .pluck ('colour_title') \t \t .flatten() \t \t .unique() \t \t.giá trị(); \t}; 'mã' để nó không còn phản ánh mảng sản phẩm ban đầu. không thể đặt $ scope.by_colour = $ routeParams.colour_title; –

4

yếu tố <select> của bạn sẽ được ràng buộc với một mô hình với ng-model, bạn có thể $watch và sử dụng để cập nhật $location.path hoặc $location.search. Cá nhân, tôi khuyên bạn nên sử dụng $location.search: bạn có thể thay đổi chỉ cần thông số bạn muốn và công việc của nó ít hơn một chút vì bạn không phải biết kiến ​​thức về toàn bộ đường dẫn trong bộ điều khiển của mình.

Vì vậy, giả sử bạn có một yếu tố <select> như thế này:

<select ng-model="selectedColor" ng-options="color for color in colors"> 

Bạn có thể sử dụng $watch để xem giá trị ràng buộc của bạn và cập nhật $location.search của bạn, đảm bảo để đặt nó vào null nếu màu sắc là undefined hoặc falsey (điều này xóa thông số tìm kiếm):

$scope.$watch('selectedColor', function (color) { 
    if (color) { 
     $location.search('color', color); 
    } else { 
     $location.search('color', null); 
    } 
}); 

Bạn có thể muốn thiết lập liên kết hai chiều giữa thông số tìm kiếm và mô hình cục bộ của bạn để thay đổi này sẽ được phản ánh trong <select> của bạn:

$scope.$watch('$location.search().color', function (color) { 
    $scope.selectedColor = color; 
}); 

Sau đó, nó chỉ là vấn đề tiếp cận $routeParams.color trong điều khiển chuyển của bạn.

Xem điều này plunk để có ví dụ hoàn chỉnh.

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