我可以建议的是保留它 MVC。这是解决方案之一 -
- 创建一个控制器来存储模型数据(在
$scope.selectOptions
控制器内部)
- 将此值传递给“选择指令”实例以显示
- 每当用户在指令中选择值时,将该选定值传递给控制器(假设控制器
$scope.selectedValue
中持有该值)
- 在控制器中添加并
$watch
在$scope.selectedValue
其回调调用中为另一个选择选项设置不同的数据集。(假设将该数据集存储在$scope.anotherSelectOption
)
- 将此传递
$scope.anotherSelectOption
给“第二指令”实例
- 每当用户在第二个指令中选择值时,将该选定值传递给控制器(假设在控制器
$scope.anotherSelectedValue
中持有该值)
- 在控制器中添加并
$watch
在$scope.anotherSelectedValue
其回调中更改您想要做的事情
这是您的 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: '='
}
};
});