0

我正在使用带有参数的 $location.path 触发 URL 更改,但是这些参数没有传递到目标页面。

我的源页面是sidebar.html,我的目标页面是dashboard.html。

在我的 sidebar.html 中,我呈现了一个 Kendo UI 树视图小部件,如下所示:

<span id="treeview" kendo-tree-view="tree" 
            style="color:white;"
            k-template="vm.treeItemTemplate"
            k-options="vm.treeOptions"
            k-data-source="vm.reportsTree"
            k-on-change="vm.onTreeSelect(kendoEvent)">
 </span>   

在我的 sidebar.js 中,我使用点击事件设置了vm.treeItemTemplate

vm.treeItemTemplate = "<a href='\' ng-click='vm.treeItemClick(this)'> {{dataItem.text}} </a>";

然后,一旦我在浏览器中单击树视图项目,我就会触发 vm.treeItemClick 事件来更改 URL 并发出“reptname”参数:

vm.treeItemClick = function (item) {
        console.log("tree view clicked !");
        $location.path('/index.html').search({reptname:'MTM'});
}

这很痛苦,我会很感激一些建议。

我需要使用左侧导航栏中的 Kendo treeview 对象来允许用户选择各种报告选项,这些选项又将重定向到具有特定“reptname”参数值的dashboard.html。

现在,当我在sidebar.js (使用 Chrome 开发工具)中打破 $location.path() 时,我清楚地看到了 $location 对象上的正确 URL 属性。

$location
LocationHashbangUrl {$$protocol: "http", $$host: "localhost", $$port: 49479, $$parse:  function,       $$compose: function…}
$$absUrl: "http://localhost:49479/index.html#/index.html?reptname=MTM"
$$host: "localhost"
$$parse: function (url) {
$$path: "/index.html"
$$protocol: "http"
$$replace: false
$$rewrite: function (url) {
$$search: Object
$$url: "/index.html?reptname=MTM"
__proto__: Object

但是,一旦它被重定向到 dashboard.html(在我的路由中定义为 url:"/"),我就看不到 $location 对象中的参数列表,也看不到 $routeParams 对象中的参数列表。

这就是我卡住的地方!

- - - 更新 - - - -

当我使用参数手动刷新 index.html 页面时,$location 对象包含参数。

ex/ URL:手动输入的链接

但是,如果我使用从 sidebar.js 重定向$location.path('/index.html').search({reptname:'MTM'});,我什么也得不到!

4

2 回答 2

1

如果您在控制台中看到参数,但在执行代码中没有看到,可能是因为 Chrome 倾向于评估 console.log 有点延迟,足以让异步请求完成并填充数据,因此它不是可靠的调试方式。

你能监听 $viewContentLoaded 事件被触发然后检查路径吗?即视图已完全加载并且应该设置所有变量(包括 $location.path())

于 2014-07-17T07:32:28.190 回答
0

我在这个问题上没有得到任何真正的答案,所以我最终以这种方式解决了它:

在 Source 页面 sidebar.js 中,我定义了 treeview 的 onSelect event() :

 function onTreeSelect(e) {
        vm.selectedReport = e.sender._current.text();          
        $location.url('index.html#/?reptname=' + vm.selectedReport);            
    }

在目标页面上,dashboard.js 我使用 hash() 方法读取查询字符串:

  vm.reptNameParam = $location.$$hash.split("="); 

似乎 $location.url() 是我可以使用参数列表成功重定向的唯一方法。使用 $location.path() 对我不起作用;意思是,我无法使用 $location.hash() 或任何其他方法读取目标页面中的查询字符串,因为它返回一个空字符串。

于 2014-07-20T14:57:32.650 回答