我在" hostController"中的表格中显示主机列表控制器。 ClusterController是hostController的父级。主机是群集视图中的选项卡。只有在群集列表可用时才会调用获取主机(在单击群集视图的下拉列表时调用该列表)。因此,即使我们选择了主机选项卡,也不应触发主机列表调用,因此不应显示主机列表(因为群集列表不可用)。但是,如果我们选择了主机选项卡,然后单击群集视图的下拉列表以获取群集列表,则应显示主机列表。但它没有发生这样的事情。主机列表会更新,但UI中不会显示相同的更改。
Cluster视图中的下拉列表将调用getClusterList()并更新showNavContent属性。仅当showNavContent属性为true时,才应显示主机列表。我正在clusterController中再次编译hostController,因此函数getHostList被调用并更新了hostVm.hostList属性,但在UI上却没有反映出来。
//ClusterController
function clusterController($scope, $controller, $rootScope) {
var vm = this,
hostVm;
$rootScope.showNavContent = false;
function getClusterList() {
clusterStore.getClusterList().then(function(data) {
$rootScope.showNavContent = true;
hostVm = $controller("hostController as hostVm", { $scope: $scope});
});
};
//HostController
app.controller("hostController", hostController);
function hostController($scope, $rootScope, $state, $stateParams, hostStore, tabManager) {
var vm = this;
vm.getHostList = getHostList;
vm.activeTab = tabManager.getActiveTab();
vm.hostList = [];
init();
function getHostList() {
hostStore.getHostList().then(function(data) {
vm.hostList = data.data;
console.log(vm.hostList);
});
}
function init() {
if($rootScope.showNavContent === true) {
vm.getHostList();
}
}
}
//host.html
<div class="flex-table">
<div class="ft-row" ng-repeat="host in hostVm.hostList">
<div class="ft-column">
<div class="host-name">{{host.name}}</div>
<div>{{host.ip}}</div>
</div>
</div>
</div>