angularで検索エンジンインターフェースを実行しようとしています。ユーザーがフォームでいくつかのパラメーターを選択し、[検索] をクリックすると、URL にパラメーターが入力されます。$location.search()
フォームの作成に使用される検索インターフェースのパラメーター:
params = {
milestones: [ "a", "b", "c", "d", etc. ],
properties: [
{ "name": "name A", type: "text" },
{ "name": "name B", type: "checkbox" },
{ etc. }
]
}
コントローラー内:
$scope.query = $location.search(); // get the parameters from the url
$scope.search = function (query) { // set the parameters to the url
$location.search(query);
};
およびフォームのhtml
<select ng-model="query.milestone_name" ng-options="ms for ms in params.milestones">
<option value="">-select milestone-</option>
</select>
<select ng-model="property" ng-options="prop.name for prop in params.properties" ng-change="query.property_name=property.name">
<!-- if the object 'property' was passed in the url, it would look like this `%5Bobject%20Object%5D`, so its 'name' parameter is converted to a string -->
<option value="">-select property-</option>
</select>
<span ng-switch="property.type">
<label ng-switch-when="text">{{query.property_name}}: <input type="text" ng-model="query.property_value"></label>
<label ng-switch-when="checkbox">{{query.property_name}}: <input type="checkbox" ng-model="query.property_value"></label>
</span>
<button ng-click="search(query)">search</button>
ページの別の場所に結果のリストがあります。
ユーザーは、次のような URL で検索結果ページにアクセスすることもできます。
http://myapp.com/search?milestone_name=a&property_name=name%20A
ほとんどすべてが正常に動作します。結果のリストが表示され、「milestone」パラメーターがコンポーネントの正しい値で事前に選択されますがselect
、「property」パラメーターは文字列ではなくオブジェクトであるため、そうではありません。
select コンポーネントのデフォルト値 (ng-model) をオブジェクトに設定するにはどうすればよいですか?
または、これをどのように行うべきかについての他のアイデアはありますか?