douwen4401 2014-05-14 19:19
浏览 32
已采纳

angularjs,使用路由中的函数作为templateUrl

It's possible to use a function as the templateUrl. The official documentation for $routeProvider states:

templateUrl – {string=|function()=}

$routeProvider official documentation

In javascript, a function has the syntax of:

function() {code here}

But the documentation shows:

function()=

Using function()=Code Here doesn't work. What is the syntax for using a function for the templateUrl in angularjs routing?

If I use something like:

when('/Store/:StoreId', {
      templateUrl: function()=webPages/Stores.php?storeID=' + :StoreId,
      controller: 'storeParseData'

This does not work. I guess that the URL match for :StoreId is automatically stored in $routeProvider. I've tried using $scope, $location, and $routeProvider in various different ways with no success. I'm looking for the simplest and most straight forward way to pass a URL # hash id to the templateUrl.

The reason I need to inject dynamic info into the templateUrl, is because the page I'm loading is a PHP file that runs PHP code when loaded. The PHP code retrieves info from the hash # URL. Retrieving the :StoreId in the controller won't help me. I want the PHP file to retrieve data from the server side rather than the front end JavaScript controller.

Here is the PHP code:

<?php
//There are two basic scenarios. 1) Get all Store names to populate the Store List
// 2) Get all the postings from a particular user, (store)
// If the URL has 'cat=something', then get all the store data
// If the URL does NOT have 'cat=something', then get the store data.

//Only get the store names if DIV with the store names is empty, otherwise
//just get the stores listings.

$storeNames = file_get_contents('https://NameOfDataURLHere.com/.json');

//information that was previously put into the URL string ending, is parsed with the following code.
$urlPiece = $_SERVER['REQUEST_URI'];
echo("url Piece: ".$urlPiece);
//find the position of the first character in the URL string with search criteria: 'storeID='.
//First the URL is checked for 'storeID='.  If 'storeID=' exits in the URL, then the page routing injected 'storeID='
//as a string for an argument to be passed.  If no argument was passed, then 'storeID=' string.
$posOfEqualSign = strrpos($urlPiece,"storeID=");
echo("<br>");
echo("posOfEqualSign: ".$posOfEqualSign);
echo("<br>");
//If the string 'storeID=' was found, it's okay to proceed.

if (isset($posOfEqualSign) && strlen($posOfEqualSign) > 0) {
  //the substr function in PHP doesn't need an length designation if you want the default to go to the end of the string.
  $storeID = substr($urlPiece,$posOfEqualSign + 8);
  echo("storeID Length: ".strlen($storeID));
  echo("<br>");
  echo("storeID: " . $storeID);
  echo("<br>");
}

if (isset($storeID) && strlen($storeID) > 3) {
  //get all listings for the store out of the listings database with the store ID
  //The store ID was retrieved from the URL.  The store ID was put into the URL when the user clicked the store name.
  $storeListings = file_get_contents('https://NameOfDataURLHere.com/'.$storeID.'/.json');
  $listingsDecoded=json_decode($storeListings,true);

  echo("storeListings: ".$storeListings);
  echo("<br>");

  if (strlen($storeListings) > 1) {
  foreach ($listingsDecoded as $key => $value) {
    //$keyValHere = "\"" . $key . "\"";

    //echo "keyValHere " . $keyValHere;
    echo"<br><br>";
    echo "Level 1 Key: " . $key;
    echo '<br><br>';

    $storeListingsData = array();

    foreach($value as $x=>$v) {
        echo "Level 2 Key: " . $x;
        echo"<br>";
        echo "Lelvel 2 value: " . $v;
        echo"<br>";
        $specificListing = substr($v, 4);
        $catToGetItemFrom = substr($v,0,3);
        echo 'The Listing ID: ' . $specificListing;
        echo"<br>";
        echo 'The category: ' . $catToGetItemFrom;
        if (strlen($catToGetItemFrom) > 0 && strlen($specificListing) > 1) {
          if (ord($catToGetItemFrom) <= 109) { //ord returns the ASCII value of the first character of a string
            $whatDB = "NameOfDBHere";
          } else {
            $whatDB = "NameOfSecondDBHere";
          }
          $oneStoreListing = file_get_contents('https://'.$whatDB.'.dataURL.com/'.$catToGetItemFrom.'/'.$specificListing.'/.json');
        } else {
          $oneStoreListing = "";
          echo('one store Listing: '.$oneStoreListing);
        }

        if (strlen($oneStoreListing) > 1) {
          //Keep adding single store listings to the array until the loop is done.
          array_push($storeListingsData, $oneStoreListing);
        }
    }
  }
}

echo '<br>';
echo('store Names: '.$storeNames);
echo('<br>');
echo('one store Listing: '.$storeListingsData);

}
?>

Data Injected Into A DIV with PHP for Later Retrieval:

    <br>

<div id="idCatName" style="display: inline"><?php echo $catToGetItemFrom;?></div>
<br>
<div id="idStoreNames" style="display: inline"><?php echo($storeNames);?></div>
<br>
<div id="idStoreData" style="display: inline"><?php echo($storeListingsData);?></div>

The Solution - With a Little Help From Others:

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

$routeProvider.
    when('/Store/:StoreId', {
        templateUrl: function(params){return 'webPages/Stores.php?storeID=' + params.StoreId;},
        controller: 'storeParseData'
     }).
     otherwise({ redirectTo:'/Home' });
  }]);
  • 写回答

2条回答 默认 最新

  • dongmeng2509 2014-05-14 19:34
    关注
    .when('/:storeId/private', {
        templateUrl: function(params) {return 'webPages/Stores' + params.storeId;},
        controller: 'storeParseData'
    })
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器