Общий фильтр для двух разных маршрутов
var app = angular.module("myApp", ['ngRoute', 'ngSanitize']);
app.controller('landingPageController', function($scope) {
$scope.countries = [{
name: "India",
Id: "1"
}, {
name: "Nepal",
Id: '2'
}];
});
У меня одинаковые критерии фильтра на двух различий. Страницы в угловых, поэтому я использовал один контроллер с 2-мя маршрутами и двумя diff. HTML для части фильтра. Мне нужно, если я выберу любую страну на домашней странице, тот же выбор должен быть отражен на странице о (вместо того, чтобы снова выбрать ту же страну). Я имею в виду, что это должен быть общий фильтр на 2 страницах, а не отдельный.
Вот URL: http://plnkr.co/edit/VMYYBDy4doWCzUa4d6Uq?p=preview
нужна помощь, чтобы разобраться...
1 ответ
Вы можете обмениваться данными между различными контроллерами (или разными экземплярами одного и того же контроллера), используя, например, services
, Так в вашем scotchApp
(звучит вкусно, кстати!) вы могли бы иметь что-то вроде
scotchApp.service('countryService', function() {
var current;
return {
// set selected country
set: function(country) {
current = country;
console.log('set', current);
},
// get selected country
get: function() {
console.log('get', current);
return current;
}
};
});
И ваш mainController
как
scotchApp.controller('mainController', function($scope, countryService) {
$scope.countries = [{
name: 'India',
id: 1 // note the property casing here
},{
name: 'Nepal',
id: 2
}];
// get selected country
$scope.selectedCountry = countryService.get();
// set selected country
$scope.set = function(country) {
countryService.set(country);
};
});
И template
для ваших маршрутов
<div>
<select ng-options="country.name for country in countries track by country.id"
ng-model="selectedCountry"
ng-change="set(selectedCountry)">
<option value="">Select country</option>
</select>
</div>
Это должно сделать это.