Javascript Angular Ui Router Extras |尝试实现粘性状态,但不工作
我想用这个来模拟我的处境: 我有3个选项卡,想法是用户在文本框中键入一个单词,当单击按钮时,角度服务根据文本框中键入的内容从数据库返回答案(结果)(我模拟了这个过程,向json文件请求数据,因此无论您键入什么都不重要,始终将返回整个数据),并在另一个视图中填充了一个表 我的目标是什么?好吧,我需要保留每个选项卡中的每个视图。换句话说,当用户单击一个选项卡(更改状态)并返回到另一个选项卡时,请求的数据可能在那里(以及在搜索框中键入的内容) 编辑: 我有一个包含我的定义的数组:Javascript Angular Ui Router Extras |尝试实现粘性状态,但不工作,javascript,angularjs,angular-ui-router,angularjs-routing,angular-ui-router-extras,Javascript,Angularjs,Angular Ui Router,Angularjs Routing,Angular Ui Router Extras,我想用这个来模拟我的处境: 我有3个选项卡,想法是用户在文本框中键入一个单词,当单击按钮时,角度服务根据文本框中键入的内容从数据库返回答案(结果)(我模拟了这个过程,向json文件请求数据,因此无论您键入什么都不重要,始终将返回整个数据),并在另一个视图中填充了一个表 我的目标是什么?好吧,我需要保留每个选项卡中的每个视图。换句话说,当用户单击一个选项卡(更改状态)并返回到另一个选项卡时,请求的数据可能在那里(以及在搜索框中键入的内容) 编辑: 我有一个包含我的定义的数组: var parent
var parentStates = [
{state : 'tab1', url: '/tab1/', template: 'tab1.html', s: false, d: true},
{state : 'tab2', url: '/tab2/', template: 'tab2.html', s: false, d: true},
{state : 'tab3', url: '/tab3/', template: 'tab3.html', s: false, d: true},
{state : 'tab1.table', url: '', template: 'table.html', s: true, d: false},
{state : 'tab2.table', url: '', template: 'table.html', s: true, d: false},
{state : 'tab3.table', url: '', template: 'table.html', s: true, d: false}
];
我用这种方式来定义我的国家:
parentStates.forEach(function(childName){
$stateProvider
.state("home." + childName.state, {
controller: "itemController", resolve: { $title: function() { return childName.state; } },
url: childName.url,
templateUrl: childName.template,
sticky: childName.s,
deepStateRedirect: childName.d
})
});
仅对stateshome.tab*.table
应用sticky。这起作用,但不符合要求。例如,我在搜索框中键入的内容,在更改选项卡时显示。我需要每个选项卡保留3个数组(如下所述)中的内容。这是我的问题
我有3个阵列:
$scope.Model.items;
$scope.Model.filteredlist;
$scope.Model.expenses;
我使用一个名为$scope.clear_arrays
的函数来清除数组上的数据(甚至在$stateChangeSuccess
上)。我不知道这是否可以得到我想要的
我知道我必须使用很棒的(sticky State)
库,但我不知道如何将其应用到我的案例中。我尝试过:
sticky: true,
deepStateRedirect: true,
但不起作用。一些想法,一些帮助
编辑:
正如上面所说,我需要的正是这一部分:
…切换到其他选项卡时,应用程序中某个选项卡的状态不会退出。用户应能够在选项卡之间来回切换,而不会中断其工作流
在使用ui router extra的粘性状态时,需要记住几个设计决策:
$stateProvider
.state('main', {
url: '/',
controller: 'MainCtrl',
controllerAs: 'main',
templateUrl: 'state-main.html'
})
.state('main.tab1', {
url: '/tab1',
sticky: true,
views: {
tab1: {
templateUrl: 'state-tab1.html',
}
}
})
$stateProvider
.state('main', {
url: '/',
controller: 'MainCtrl',
controllerAs: 'main',
templateUrl: 'state-main.html'
})
.state('main.tab1', {
url: '/tab1',
sticky: true,
views: {
tab1: {
templateUrl: 'state-tab1.html',
}
}
})
下面是一个使用粘性状态的非常简单的示例:
对于您的应用程序,我应用了上面列出的原则并删除了表子状态,因为这些子状态有点复杂。因此为了简化,我冒昧地将表包装在一个指令中,并将数据从父范围传递到表中
该指令的使用变得非常简单(可以更恰当地重命名它):
请记住,Model.tab1
包含tab1
状态的元素数组(记住共享控制器)
最后,这里是您的应用程序处理粘性状态:
我希望这有帮助:)您的选项卡需要动态吗?我看到您正在自动化许多事情,这为实现粘性状态增加了大量复杂性。例如,对于粘性状态,我们需要做的一件事是对ui视图执行如下操作:
重现问题的最短代码应该在您的问题中;以plunkr为辅助。如果plunkr链路404s;那么这个问题对未来的访客来说就没用了。@sergiocruz谢谢你的回答!是的,我知道这有点复杂,但我真的需要标签可以是动态的。也许你可以给我一些帮助,或者一些例子来了解粘性状态是如何与标签一起工作的。我的朋友,我的朋友@为了让我们重新打开问题并解决您的问题,您需要输入代码。这就是为什么我们对这个问题有一个明确的原因。@robe007这是我最接近它的原因:让我知道这是否对你有效,我将很高兴发布一个详细的答案,说明我必须做什么才能使这项工作有效。这是一个截图:谢谢你的回答。我已经做了另一个改变,这是最后一个也是最棒的应用:!