2017-04-02 73 views
1

我的a标签有问题 - 我有一个页面,根据GET变量显示数据。AngularJS:如何使用ui-router为我的应用创建路由

例如 - /foo.php?opt=1将显示每个城市的表格 - /foo.php?city=4有/学校表的表格/foo.php?school= 4,显示学生的表格等。

问题是,它第一次工作 - 当我选择城市时,它会显示我的学校列表和更改网址,但是当我选择学校时,它会更改URL但我仍然可以看到城市桌,只有按F5键,才会显示桌上的学生。

这是代码:

odinvite.php:

<?php 
if (isset($_GET['city'])) 
{ 
    include "odbycity.php"; 
} 
else if (isset($_GET['school'])) 
{ 
    include "odbyschool.php"; 
} 
else 
{ 
    include "odshowcities.php"; 
} 
?> 

odshowcities.php:

<div ng-controller="allcities"> 

    <button class="btn btn-info" ng-repeat="x in names"> 
     <a href="/odinvite.php?city={{x.areaid}}"> 
     {{x.areaname}}</a> 
    </button> 

</div> 

odbyschool.php:

<div ng-controller="odbycity"> 
    <button class="btn btn-info" ng-repeat="x in names"> 
     <a href="/odinvite.php?school={{x.schoolid}}"> 
     {{x.school_name}}</a> 
    </button> 
</div> 

MyAngular.js:

var myApp = angular.module('myApp',[]); 

myApp.config(function($locationProvider) { 

    $locationProvider.html5Mode(true); 
}); 

myApp.controller ('allcities', function ($scope, $http) 
{ 
    $http.get("fetch_json_sql.php?option=1") 
     .then(function (response) 
     { 
      $scope.names = response.data.result; 
     }); 
    console.log($scope.names); 
}); 

myApp.controller ('odbycity', function ($scope, $http, $location) 
{ 
    $scope.cityid=$location.search().city; 
    console.log($scope.cityid); 
    $http.get("fetch_json_sql.php?option=2&cityid="+$scope.cityid) 
     .then(function (response) 
     { 
      $scope.names = response.data.result; 
     }); 

}); 

myApp.controller ('odbyschool', function ($scope, $http ,$location) 
{ 
    $scope.schoolid = $location.search().school; 
    console.log($scope.schoolid); 
    $http.get("fetch_json_sql.php?option=4&schoolid="+$scope.schoolid) 
     .then(function (response) 
     { 
      $scope.names = response.data.result; 
     }); 

}); 

可能是什么问题?

我试图做出100%的URL更改 - <a href="www.google.com">link</a>并没有奏效。只是改变了网址而没有重定向。

谢谢!

+0

请添加您的路线配置。 – lin

+0

@lin只需添加它即可。 –

+0

m8,AngularJS适用于SPA。将路由与后端直接结合起来并不那么容易。你应该使用ngRoute或者uiRouter,而不需要你的模板被后端渲染。我仍然看不到'/odinvite.php? school'或'odinvite.php?city'的路线配置。你的问题是“为什么我的路线不能正常工作”。 – lin

回答

1

您应该停止使用后端呈现模板。 AngularJS适用于SPA。如果您需要后端提供的数据,请尝试实施API一个RESTful API。你需要配置你的路线,例如像这个runnable demo plnkr。它使用ui-router。请注意,这只是一个演示。你应该能够把你的逻辑放到原型中。我使用一些虚拟数据准备了您需要的所有路线。只需将你现有的API包含在控制器中,你应该没问题。

var myApp = angular.module("myApp", ['ui.router']); 

myApp.config(function ($stateProvider, $urlRouterProvider) { 
    $urlRouterProvider.when("", "/main"); 

    $stateProvider 
     .state("main", { 
      url: "/main", 
      templateUrl: "main.html" 
     }) 
     .state("main.listSchools", { 
      url: "/listSchools/:schoolId", 
      templateUrl: "schools.html" 
     }) 
     .state("main.listAreas", { 
      url: "/listAreas/:areaId", 
      templateUrl: "areas.html" 
     }); 
}); 


myApp.controller('mainMenuController', function ($scope) { 
    $scope.schools = [{ 
     schoolid: 1, 
     name: 'Test School 1' 
    },{ 
     schoolid: 5, 
     name: 'Test School 5' 
    },{ 
     schoolid: 11, 
     name: 'Test School 11' 
    }]; 
    $scope.areas = [{ 
     areaid: 3, 
     name: 'Test area 3' 
    },{ 
     areaid: 7, 
     name: 'Test area 7' 
    },{ 
     areaid: 19, 
     name: 'Test area 7' 
    }]; 
}); 



myApp.controller('listSchoolController', function ($scope, $state) { 
    $scope.schoolId = $state.params.schoolId; 
}); 


myApp.controller('listAreaController', function ($scope, $state) { 
    $scope.areaId = $state.params.areaId; 
}); 
+0

如果没有'Route',没有选择吗?顺便说一句 - 我开始阅读有关“app.config(函数($ routeProvider){routeProvider .when(”/“,{{”{“} {”{“} - 是否相同? –

+0

您可以伪造路由,但这是而不是AngularJS的产品,'ngRoute'是一个不同的路由提供商,我推荐使用'uiRouter',因为它更加灵活,给你更多的选择来设计你的路由。 – lin

+0

好吧..我需要做一些作业来理解你写的东西 - 尽管它看起来有点合乎逻辑。你有推荐的网站可以解释这个吗? –

相关问题