angularjs - 离子标签点击与 $state.go
问题描述
如果用户启动应用程序并单击搜索选项卡,他们将被路由到页面并且一切正常 - 父页面已加载,被缓存,用户可以导航到子搜索详细信息并再次返回父搜索页面而没有问题.
但是,如果用户使用外部 QR 码启动应用程序,该应用程序的深层链接会被检测到,并且用户会使用 自动路由到搜索页面$state.go('/tab/search')
,该链接会提供 ID 进行查找,如果找到,则自动将用户路由到搜索详细信息页面。
这也有效....除了当用户单击后退按钮(或search
再次单击选项卡按钮)时,父视图未缓存,元素丢失,视图尝试再次刷新自身。这一切都搞砸了。我花了很长时间才弄清楚为什么会发生这种情况。
问题#1:标签点击和路由到页面之间有什么区别$state.go()
??
问题 #2:我该如何解决这个问题...在应用程序进入时,我是否应该使用 $state.go 以外的东西将用户转换到搜索页面?...触发或模拟选项卡按钮单击的东西,所以ui-router 是否能够正确跟踪页面状态?
.state('tab', {
url: "/tab",
abstract: true,
templateUrl: "templates/tabs.html",
controller: 'TabsCtrl'
})
.state('tab.home', {
cache: true,
url: '/home',
params: tabParams,
views: {
'tab-home': {
templateUrl: 'templates/tab-home.html',
controller: 'HomeCtrl'
}
}
})
.state('tab.search', {
cache: true,
url: '/search',
params: tabParams,
views: {
'tab-search': {
templateUrl: 'templates/tab-search.html',
controller: 'SearchCtrl'
}
}
})
.state('tab.search-detail', {
cache: false,
url: '/search/:ceID',
params: tabParams,
views: {
'tab-search': {
templateUrl: 'templates/detail-search.html',
controller: 'SearchDetailCtrl'
}
}
})
在 app.js 文件中,这是检测应用程序是否使用外部链接(即:二维码)打开的函数:
window.handleOpenURL = function(url) {
setTimeout(_ => {
var parsed = new URL(url);
var search = parsed.search.substring(1);
urlObj = JSON.parse('{"' + search.replace(/&/g, '","').replace(/=/g,'":"') + '"}', function(key, value) { return key===""?value:decodeURIComponent(value) }) ;
if (parsed.pathname == "//r" || parsed.pathname == "/r" || parsed.hostname == "r") {
console.log("External Link Detected") ;
extLink = 1 ;
$state.go("/tab/search",{"prodID":urlObj.id,"type":"r","qrVer":null} ;) ;
}
}) ;
}
解决方案
推荐阅读
- sql - SQL 日期逻辑 - 查找之前的*非标准*季度
- postgresql - Azure 数据工厂通过 SSH 连接到 AWS RDS PostgresSQL
- spring - 在具有远程分区的并发春季批处理作业期间,工人回复中的消息交叉
- android - 具有 PIN 身份验证的 Android BLE 外设(GATT 服务器)
- r - read_excel() 函数在 Rmarkdown 中不起作用
- azure - 从服务主体和基于秘密的登录方法生成的令牌无效
- python - C# 与 Python 通信 - 无法建立连接,因为目标机器主动拒绝它
- android - 数据绑定 - 无法从布局文件调用函数
- computer-science - IT安全中的公钥和私钥基础
- typescript - 我们可以在 NestJS 中为 TypeORM 扩展多个类吗?