使用angularjs和/或Javascript获取和设置URL的URL和部分的概述

时间:2014-05-27 01:27:24

标签: php angularjs url uri

获取和设置URL以及URL的不同部分是Application Design的基本部分。

  • 用于页面导航
  • 深层链接
  • 提供指向用户的链接
  • 查询数据
  • 将信息传递给其他页面

angularjs和javascript都提供了获取/设置URL和URL部分的方法。我正在寻找以下信息:

  • 情况:
    • 在浏览器地址栏中向用户显示一个简单的网址
    • 使用字符串参数向用户看不到的页面提供更详细的URL。换句话说,将使用两个不同的URL,一个是用户在浏览器中看到的简单URL,另一个是加载页面可用的更详细的URL。
    • 使用PHP获取 URL信息然后在页面上加载,当用户需要已加载但未显示的更详细信息时,都不会重新加载PHP页面爱好。
    • 设置 网址,其中包含更详细的深层链接网址,因为用户会向下钻取更具体的信息。
    • 获取 当angularjs检测到路由更改时,控制器或JavaSript中的URL信息。
    • 哈希或查询字符串还是两者?我应该在URL中使用哈希#,字符串?=还是两者?

以下是我目前所知道的以及我想要的内容:

  • 查询字符串HTTP:\\www.name.com?mykey=itemID将阻止angularjs重新加载页面。因此,我可以通过在末尾添加/更改字符串来更改URL,从而为页面提供新信息,并防止页面重新加载。
  • 我可以更改网址并强制重新加载页面:window.location.href = "#Store/" + argUserPubId + "?itemID=home";
  • 如果home是itemID字符串,我希望代码只是加载页面,而不是显示更详细的信息。
  • 如果网址查询字符串中有真实的itemID,我希望代码能够显示更详细的信息。
  • angularjs中的代码将从路由中指定的控制器或HTML中指定的控制器运行,或者两者都运行。
  • 路由中指定的angularjs代码似乎首先在HTML中指定的代码之前运行。
  • 页面的不同网址可以在angularjs templateURL:中使用,而不是发送到浏览器地址栏的网址。
  • 似乎即使路由没有重新加载浏览器,模板中的页面也会重置为默认设置。因此,如果我有一个类集,更改URL,该类将被设置回默认值。我想避免这样的事情。

    when('/ Store /:StoreId',{     templateUrl:function(params){return'Client_Pages / Stores.php?storeID ='+ params.StoreId;},     controller:'storeParseData' })。

以上代码在浏览器中检测到http:\\www.name.com\Store\StoreID,但在页面中发现http:\\www.name.com\Client_Pages/Stores.php?storeID=StoreID

在上面的代码中,一个函数用于angularjs路由templateURL:以动态设置templateURL。

因此,当用户点击某些内容以查看项目的详细信息时,我应该如何配置URL?我应该使用angularjs $location还是window.location.href?我应该使用更长的URL,包含更多参数,哈希爆炸或查询字符串吗?我应该使用:

  • http:\\www.name.com\Store\StoreID\ItemID
  • http:\\www.name.com\Store\StoreID#ItemID
  • http:\\www.name.com\Store\StoreID?ItemID
  • http:\\www.name.com\Store#StoreID?ItemID
  • 别的什么?

1 个答案:

答案 0 :(得分:0)

可以在不重新加载页面的情况下更改URL中的搜索字符串。

reloadOnSearch: false

必须在路由中使用。

myApp.config(['$routeProvider',
  function($routeProvider) {

    $routeProvider.
            //Note that there is both a 'Stores' and a 'Store' singular routing.  Stores plural has no controller.
            when('/Stores', {
            templateUrl: 'Client_Pages/Stores.php'
        }).
            /*This is a little complicated. See notes at top of page: */
            when('/Store/:StoreId', {
            templateUrl: function(params){return 'Client_Pages/Stores.php?storeID=' + params.StoreId;},
            controller: 'storeParseData',
            reloadOnSearch: false
        }).
            when('/Offered', {
            templateUrl: 'Client_Pages/Offered_Menu.php'
        }).
            when('/Items/:CatId', {
            templateUrl: function(params){return 'Client_Pages/Offered_Menu.php?cat=' + params.CatId;},
            controller: 'CommonController',
            reloadOnSearch: false
      }).

以下是我正在使用的完整策略的所有部分:

  • 没有搜索字符串且没有详细路径的页面的路由URL - 用于初始加载
  • 使用路径更改路由URL,以及重新加载页面并使用PHP查找数据的“虚拟”搜索字符串。
  • 路由网址包含原始详细路径以及$location.search('itemID', picID);创建的搜索字符串更改,以获取更多详细信息。
  • 每当重新加载页面时运行的控制器中的代码。这仅在第一页加载时自动运行,URL路径更改,但不会更改搜索字符串。当URL搜索字符串更改时,此“加载”代码不会运行。 “on load”代码允许用户在浏览器中粘贴链接,并让代码直接转到详细信息。
  • 点击更改网址路径但不会更改搜索字符串的事件。
  • 点击更改搜索字符串的事件,但不更改路径,然后运行一些代码。

以下是它的工作原理:

  • 用户点击主菜单。页面路由加载该页面,但没有数据。
  • 一旦用户进入该页面,他们就会从众多选择,路径更改,页面重新加载以及检索数据中进行选择。
  • 用户查看数据,如果他们想要更详细的信息,他们会点击某些内容,并更改URL搜索字符串。 (路径保持不变)
  • 由于最初加载了更详细的信息,因此不需要重新加载页面,也不需要对数据库进行任何请求。使用javascript显示更详细的信息,由于路由中的reloadOnSearch: false设置,“on load”代码无法运行。
  • 当请求更多详细信息的用户运行click事件时,该函数会使用$location.search('key', 'value')更改搜索字符串,然后触发代码以显示详细信息。 (不是来自路由控制器。)
  • 如果用户在末尾粘贴了带有搜索字符串的详细UR​​L,则整个过程会一次性发生,并且页面会在第一次加载详细信息。运行PHP,检索数据,然后在页面加载时,“on load”代码加载详细信息。

如果用户自己导航网站,那么这是一个3个步骤

  • 页面加载
  • 已加载类别数据
  • 显示的个别项目的详细信息

如果将带有搜索字符串的详细链接粘贴到浏览器中,则所有三个步骤都按顺序完成,并且它将成为一个步骤。