-6ren">
gpt4 book ai didi

javascript - 将我的复选框与动态选项卡连接

转载 作者:行者123 更新时间:2023-12-03 09:23:50 25 4
gpt4 key购买 nike

我创建了一个包含一些项目的列表,并为每个项目创建了一个复选框,如下所示:

    <md-list ng-controller="ListCtrl" class="listControls">

<md-list-item ng-repeat="account in accounts">
<md-checkbox ng-model="account.selected" ng-checked="selection.indexOf(account.title) > -1" ng-click="toggleSelection(account.title)"></md-checkbox>
<p>{{account.title}}</p>
</md-list-item>

</md-list>

我的 Controller 位于名为 list.js 的文件中:

angular.module('MyApp')
.config(function($mdThemingProvider, $mdIconProvider){
$mdIconProvider
.defaultIconSet('img/icons/sets/core-icons.svg', 24);

$mdThemingProvider.theme('default')
.primaryPalette('red')
.accentPalette('red');
})

.controller('ListCtrl', function($scope, $mdDialog) {
$scope.accounts = [
{id: 1, title: "Account A", selected: false},
{id: 2, title: "Account B", selected: false},
{id: 3, title: "Account C", selected: false},
];
...

在这里,我有一个函数,可以让我在其中一个复选框状态发生变化时采取行动。

我希望做的是添加动态选项卡,这些选项卡将在选择某个项目时出现,否则消失。

我尝试添加如 Angular Material 网站中所示的选项卡,并将 JavaScript 代码保存在名为 tabs.js 的文件中。

我的问题是选项卡创建函数位于 tabs.js 中,而更改复选框时使用react的函数位于 list.js 中,因此位于不同的 Controller 中。

如何连接这两个功能,或者如果这不可行或不建议,那么实现我想要的效果的最佳方法是什么?

编辑1

Here这就是我在没有想要集成的 tabs.js 的情况下尝试做的事情。

最佳答案

您可以使用服务在 Controller 之间共享数据。请参阅:https://docs.angularjs.org/guide/services

请参阅此代码片段,它根据是否选中相应的复选框来添加/删除选项卡。我使用 dataSrvclistCtrltabsCtrl

之间共享数据

angular.module('materialApp', ['ngMaterial', 'ngAnimate'])

.service('dataSrvc', [function() {
var tabData = {
tabs: [
{
'id': 1,
'label': 'One',
'selected': true
},
{
'id': 2,
'label': 'Two',
'selected': true
},
{
'id': 3,
'label': 'Three',
'selected': true
},
{
'id': 4,
'label': 'Four',
'selected': true
},
]
};
return tabData;
}])

.controller('listCtrl', ['$scope', 'dataSrvc', function($scope, dataSrvc) {
$scope.items = dataSrvc.tabs;

$scope.exists = function(item) {
return $scope.items.indexOf(item) > -1;
};

$scope.toggle = function(item) {
item.selected = !item.selected;
};
}])

.controller('tabsCtrl', ['$scope', 'dataSrvc', function($scope, dataSrvc) {
$scope.tabs = dataSrvc.tabs;
}]);
.ma-tabs {
width: 400px;
}

.ma-tab-content {
margin-top: 20px;
text-align: center;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/angular_material/0.9.4/angular-material.min.css">
<link rel="stylesheet" href="main.css">
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular-animate.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular-aria.min.js"></script>

<script src="https://ajax.googleapis.com/ajax/libs/angular_material/0.9.4/angular-material.min.js"></script>
<script type="text/javascript" src="main.js"></script>
</head>
<body ng-app="materialApp">
<section ng-controller="listCtrl">
<div ng-repeat="item in items">
<md-checkbox ng-checked="item.selected" ng-click="toggle(item)">
{{ item.id }}
</md-checkbox>
</div>
</section>

<section ng-controller="tabsCtrl">
<md-tabs class="ma-tabs">
<md-tab ng-repeat="tab in tabs"
ng-if="tab.selected"
label="{{::tab.label}}">
<md-content class="ma-tab-content">
Tab {{::tab.label}} Content
</md-content>
</md-tab>
</md-tabs>
</section>
</body>
</html>

关于javascript - 将我的复选框与动态选项卡连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31748133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com