修改Controller以在AngularJS中使用/接受URL参数

时间:2015-03-10 01:24:08

标签: javascript html angularjs url-parameters

我目前有办法获取一部分数据,并将其单独发送到新标签中。 enter image description here

现在的问题是,这种情况发生在AngularJS应用程序中,并且URL保持不变。所以如果我在新标签中打开"在Accounts项或Customers项中,url仍然相同(app/#/apiTab)。我希望将网址更改为app/#/apiTab?Method=Accounts&Version=1.0app/#/apiTab?Method=Customers&Version=2.3。因此,用户可以将其复制/粘贴给某人,他们可以将其插入,并在其浏览器上获得相同的结果。

我不确定那是多么可能。

这是我目前的布局。

apiTab.html (上面的底部页面 - 打开的新标签页

<div ng-controller="apiTabController">
  <div class="panel panel-info">
    <div class="panel-heading">
      <h4 class="panel-title">
        {{data.uri}}
      </h4>
    </div>
    <div class="panel-body">
      <table class="table">
        <tr ng-repeat="method in data.methods">
          <td>{{method.name}}</td>
          <td>{{method.desc}}</td>
        </tr>
      </table>
    </div>
  </div>
</div>

我的api.html片段(上面的首页 - 显示可以打开新标签的项目

<div class="tab-pane active" id="tab1">
<div ng-repeat="api in apiList[0].accounts">
   <div class="panel panel-info" id="panel1">
      <div class="panel-heading">
         <h4 class="panel-title">
            <a data-toggle="collapse" data-target="#collapseAccountsV{{$index}}" class="collapsed">
            {{api.uri}}
            </a>
            <i class="newTab" ng-click="apiTab(api)">(Open in new tab)</i>
         </h4>
      </div>
      <div id="collapseAccountsV{{$index}}" class="panel-collapse collapse">
         <div class="panel-body">
            <table class="table">
               <tr ng-repeat="method in api.methods">
                  <td>{{method.name}}</td>
                  <td>{{method.desc}}</td>
               </tr>
            </table>
         </div>
      </div>
   </div>
</div>

apiController.js 将数据推送到sessionStorage

angular.module('app').controller('APIController', ['$scope', '$location', 'APIMethodService', function($scope, $location, APIMethodService) {
    $scope.title = "API";
    $scope.apiList = APIMethodService.apis;

    $scope.apiTab = function(apiData) {
      sessionStorage.setItem("apiData", JSON.stringify(apiData));
      window.open("#/apiTab");
    };
}]);

apitabController.js 从sessionStorage为新标签提取数据

angular.module('app').controller('apiTabController', ['$scope', function($scope) {
      var retrieved = sessionStorage.getItem("apiData");
      $scope.data = JSON.parse(retrieved);
}]);

问题:如何设置此选项以选择性地接收和显示网址参数,以便用户可以使用网址直接转到特定的API部分,而不必在主要是api.html。

1 个答案:

答案 0 :(得分:0)

由于您将这些数据存储在sessionStorage中,您可以:

  1. apiData保存到sessionStorage
  2. 更改他们的$ location.path
  3. 检查$routeChangeStart上的sessionStorage以查看是否存储了apiData
  4. 如果已存储,请检索apiData,然后从sessionStorage
  5. 中删除

    可能不理想......