Angular $ location.path无法按预期工作

时间:2014-07-16 22:32:07

标签: angularjs kendo-treeview angular-kendo

我使用带参数的$ 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>";

然后,一旦我点击浏览器中的treeview项,我就会触发vm.treeItemClick事件来更改URL并限制&#34; reptname&#34;参数:

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

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

我需要在左侧导航栏中使用Kendo树视图对象,以允许用户选择各种报告选项,然后这些选项将重定向到具有特定&#34; reptname&#34;的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:&#34; /&#34;),我就不会在$ location对象中看到参数列表,也不在$ routeParams对象中。

这就是我被困的地方!

-----更新-------

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

ex / URL:Link entered manually

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

2 个答案:

答案 0 :(得分:1)

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

你可以监听要触发的$ viewContentLoaded事件,然后检查路径吗?这是视图已满载并且应设置所有变量(包括$ location.path())

答案 1 :(得分:0)

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

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

 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()或任何其他方法读取目标页面中的查询字符串,因为它返回一个空字符串。