url 中未显示更改查询参数
Changing query param is not shown in the url
我想单击 "export" 按钮并转移到路线 "home",并将 "export" 查询参数设置为 true。我不希望此查询参数刷新我的路线。所以我的路线是这样的:
export default Route.extend(ApplicationRouteMixin, {
queryParams: {
export: {
refreshModel: false
}
}
})
在我的控制器中,我试图观察查询参数并调用一个为我导出的函数,然后我想将查询参数设置回 null。这是我的控制器:
import Ember from 'ember'
const {Controller, inject} = Ember
export default Controller.extend({
// == Dependencies ==========================================================
session: inject.service(),
// == Keyword Properties ====================================================
queryParams: ['export'],
export: null,
queryParamsObserver: function () {
if (this.get('export')) {
this.exportFile()
this.set('export', null)
}
}.observes('export'),
// == Functions =============================================================
exportFile () {
},
// == Actions ===============================================================
actions: {
}
})
但我的问题是,当我将查询参数设置为 null 时,它不会在 url 上改变。我想知道我在这里遗漏了什么不会导致这种行为。
另外,我想知道使用观察查询参数是否是触发某些操作的最佳解决方案。
第一个选项,使用 service
并通过应用程序路由或按钮组件触发导出似乎更适合您的情况。您可以在所有路线中使用它。用户在导出时停留在同一条路线上。我会使用这个选项。
第二个选项是将 exportFile
转换为 thennable
函数。导出完成后,您可以清除queryParams。这是 a working twiddle 给你的。
您的问题与以下事实有关:您在控制器中设置 export
太早,查询参数更改未反映到 url。了解 Ember.run 循环并非易事。您应该通过阅读 following.
开始学习 运行 循环
看看下面的 twiddle,如果你把 export
的设置包裹在 Ember.run.scheduleOnce
中,就像在 twiddle 中那样,你会看到 export
被清除了url。 (事实上它会立即被删除;你永远不会看到它变成真的;如果你将导出函数和 export
标志的清除都包装在一个承诺中;假设这将在几秒钟后解决;那么你会看到它会成为 true
然后将被删除)。
关于您关于使用观察者的问题;我看不出您可以用当前的设计做任何事情。原因是;你说 refreshModel
是假的;因此,如果您已经在同一条路线中,则您在路线中没有任何可用的挂钩方法来触发控制器内的 export
功能。你需要改变你的设计; ykaragol 的建议可能是一个很好的起点。
我想单击 "export" 按钮并转移到路线 "home",并将 "export" 查询参数设置为 true。我不希望此查询参数刷新我的路线。所以我的路线是这样的:
export default Route.extend(ApplicationRouteMixin, {
queryParams: {
export: {
refreshModel: false
}
}
})
在我的控制器中,我试图观察查询参数并调用一个为我导出的函数,然后我想将查询参数设置回 null。这是我的控制器:
import Ember from 'ember'
const {Controller, inject} = Ember
export default Controller.extend({
// == Dependencies ==========================================================
session: inject.service(),
// == Keyword Properties ====================================================
queryParams: ['export'],
export: null,
queryParamsObserver: function () {
if (this.get('export')) {
this.exportFile()
this.set('export', null)
}
}.observes('export'),
// == Functions =============================================================
exportFile () {
},
// == Actions ===============================================================
actions: {
}
})
但我的问题是,当我将查询参数设置为 null 时,它不会在 url 上改变。我想知道我在这里遗漏了什么不会导致这种行为。 另外,我想知道使用观察查询参数是否是触发某些操作的最佳解决方案。
第一个选项,使用 service
并通过应用程序路由或按钮组件触发导出似乎更适合您的情况。您可以在所有路线中使用它。用户在导出时停留在同一条路线上。我会使用这个选项。
第二个选项是将 exportFile
转换为 thennable
函数。导出完成后,您可以清除queryParams。这是 a working twiddle 给你的。
您的问题与以下事实有关:您在控制器中设置 export
太早,查询参数更改未反映到 url。了解 Ember.run 循环并非易事。您应该通过阅读 following.
看看下面的 twiddle,如果你把 export
的设置包裹在 Ember.run.scheduleOnce
中,就像在 twiddle 中那样,你会看到 export
被清除了url。 (事实上它会立即被删除;你永远不会看到它变成真的;如果你将导出函数和 export
标志的清除都包装在一个承诺中;假设这将在几秒钟后解决;那么你会看到它会成为 true
然后将被删除)。
关于您关于使用观察者的问题;我看不出您可以用当前的设计做任何事情。原因是;你说 refreshModel
是假的;因此,如果您已经在同一条路线中,则您在路线中没有任何可用的挂钩方法来触发控制器内的 export
功能。你需要改变你的设计; ykaragol 的建议可能是一个很好的起点。