我可以建議的是保持MVC。下面是解之一 -
- 創建一個控制器,用於存儲模型數據(這裏
$scope.selectOptions
內部控制器)
- 傳遞這個值以「選擇的指令」實例,以顯示
- 每當用戶選擇在指令值,傳遞選擇的值提供給控制器(可以說在控制器
$scope.selectedValue
被保持該值)
- 在控制器上
$scope.selectedValue
,並在其回叫呼叫爲不同的數據爲另一選擇選項設置添加$watch
。(可以說存儲在$scope.anotherSelectOption
該數據集)
- 通過這
$scope.anotherSelectOption
爲「第二指令」實例
- 每當用戶選擇在第二指令,所選的值提供給控制器(該值,通允許在控制器
$scope.anotherSelectedValue
說的是保持該值)
- 在控制器上
$scope.anotherSelectedValue
,並在其回調變更網址的事情添加$watch
你想要做
這是你的HTML的樣子 -
<div ng-controller="MyCtrl">
<select-directive selection-option="selectOptions", selected-option="selectedValue"> </select-directive>
<select-directive selection-option="anotherSelectOptions", selected-option="anotherSelectedValue"> </select-directive>
</div>
這是你的控制器,它會是這個樣子 -
yourApp.controller('MyCtrl', function($scope) {
$scope.selectOptions = []; // add init objects for select
$scope.selectedValue = null;
$scope.$watch('selectedValue', function() {
// here load new values for $scope.anotherSelectOptions
$scope.anotherSelectOptions = [] // add init objects for select
$scope.anotherSelectedValue = null;
});
$scope.$watch('anotherSelectedValue', function() {
// here add code for change URL
});
});
這是你的指令範圍
yourApp.directive('selectDirective', function() {
return {
templateUrl: 'views/directives/select.html',
restrict: 'E',
scope: {
selectionOption: '=',
selectedOption: '='
}
};
});
爲什麼你需要選擇一個指令?也許我錯過了一些東西,但是你的模型可以驅動所有的行爲,特別是因爲邏輯非常專用。 – 2014-09-24 02:14:04
因爲這不是一個簡單的選擇,而是在單擊選擇按鈕後,用戶會看到每個面板中帶有多個選項的選項卡式面板。雖然我可能會過分複雜。你能否詳細闡述'模型能驅動所有行爲'? – owca 2014-09-24 02:25:25
啊,如果「選擇」更像是一個自定義控件,那麼它是有道理的。 – 2014-09-24 06:12:45