如何创建级联 md-select 和 angularjs?
How can i create a cascading md-select with angularjs?
我有JSON这样的,
$scope.analytics = {
'Twitter': [
'Following',
'Followers',
'Tweets'
],
'Facebook': [
'People engaged',
'Likes',
'Clicks',
'Views'
],
'LinkedIn': [
'Overview'
]
};
从上面,我需要创建一个级联md-select,首先md-select应该有Twitter,Facebook和Linkedin。
OnChanging Twitter,它应该在下一个 md-select 中显示 Following,Followers,Tweets。
HTML:
<md-select ng-model="type" >
<md-option ng-value="t" data-ng-repeat="t in analytics">{{ t }}</md-option>
</md-select>
<md-select ng-model="metrics" >
<md-option ng-value="t" data-ng-repeat="t in analytics">{{ t }}</md-option>
</md-select>
App.JS:
app.controller('MainCtrl', function($scope) {
$scope.analytics = {
'Twitter': [
'Following',
'Followers',
'Tweets'
],
'Facebook': [
'People engaged',
'Likes',
'Clicks',
'Views'
],
'LinkedIn': [
'Overview'
]
};
});
这是我在 Cascading md-select
中的代码
解决这个问题的关键是监视第一个 select 的值并控制第二个的选项。另外记得清除依赖selection,当masterselection改变!
示例实现:
在范围内添加一个 level2
变量。它将包含从属 select.
的选项
将手表放在第一个模型上:
$scope.$watch('type', function(newval, oldval) {
if( newval ) {
$scope.level2 = $scope.analytics[newval];
}
else {
$scope.level2 = [];
}
// delete the dependent selection, if the master changes
if( newval !== oldval ) {
$scope.metrics = null;
}
});
最后,标记需要稍微调整一下才能正确显示:
<md-select ng-model="type" >
<md-option ng-value="k" data-ng-repeat="(k,v) in analytics">{{ k }}</md-option>
</md-select>
<md-select ng-model="metrics" >
<md-option ng-value="t" data-ng-repeat="t in level2">{{ t }}</md-option>
</md-select>
看到一个分叉的 plunk:http://plnkr.co/edit/rI3AsC2plZ3w82WRBjAo?p=preview
可能比这更简单。删除 $watch
,只需将 md-options
项中的 ng-repeat
更改为 metrics
<md-select ng-model="type">
<md-option ng-value="k" data-ng-repeat="(k,v) in analytics">
{{ k }}
</md-option>
</md-select>
<md-select ng-model="metrics">
<md-option ng-value="t" data-ng-repeat="t in analytics[type]">
{{ t }}
</md-option>
</md-select>
我有JSON这样的,
$scope.analytics = {
'Twitter': [
'Following',
'Followers',
'Tweets'
],
'Facebook': [
'People engaged',
'Likes',
'Clicks',
'Views'
],
'LinkedIn': [
'Overview'
]
};
从上面,我需要创建一个级联md-select,首先md-select应该有Twitter,Facebook和Linkedin。
OnChanging Twitter,它应该在下一个 md-select 中显示 Following,Followers,Tweets。
HTML:
<md-select ng-model="type" >
<md-option ng-value="t" data-ng-repeat="t in analytics">{{ t }}</md-option>
</md-select>
<md-select ng-model="metrics" >
<md-option ng-value="t" data-ng-repeat="t in analytics">{{ t }}</md-option>
</md-select>
App.JS:
app.controller('MainCtrl', function($scope) {
$scope.analytics = {
'Twitter': [
'Following',
'Followers',
'Tweets'
],
'Facebook': [
'People engaged',
'Likes',
'Clicks',
'Views'
],
'LinkedIn': [
'Overview'
]
};
});
这是我在 Cascading md-select
解决这个问题的关键是监视第一个 select 的值并控制第二个的选项。另外记得清除依赖selection,当masterselection改变!
示例实现:
在范围内添加一个 level2
变量。它将包含从属 select.
将手表放在第一个模型上:
$scope.$watch('type', function(newval, oldval) {
if( newval ) {
$scope.level2 = $scope.analytics[newval];
}
else {
$scope.level2 = [];
}
// delete the dependent selection, if the master changes
if( newval !== oldval ) {
$scope.metrics = null;
}
});
最后,标记需要稍微调整一下才能正确显示:
<md-select ng-model="type" >
<md-option ng-value="k" data-ng-repeat="(k,v) in analytics">{{ k }}</md-option>
</md-select>
<md-select ng-model="metrics" >
<md-option ng-value="t" data-ng-repeat="t in level2">{{ t }}</md-option>
</md-select>
看到一个分叉的 plunk:http://plnkr.co/edit/rI3AsC2plZ3w82WRBjAo?p=preview
可能比这更简单。删除 $watch
,只需将 md-options
项中的 ng-repeat
更改为 metrics
<md-select ng-model="type">
<md-option ng-value="k" data-ng-repeat="(k,v) in analytics">
{{ k }}
</md-option>
</md-select>
<md-select ng-model="metrics">
<md-option ng-value="t" data-ng-repeat="t in analytics[type]">
{{ t }}
</md-option>
</md-select>