2015-10-05 66 views
1

我在使用angular.js單擊鏈接時出現以下錯誤。使用angular.js使用angular.js獲取錯誤ui-router

錯誤:

Error: Could not resolve '.profile?p_i=3' from state 'dashboard.profile' 
    at Object.t.transitionTo (angularuirouter.js:7) 
    at Object.t.go (angularuirouter.js:7) 
    at angularuirouter.js:7 
    at angularjs.js:146 
    at e (angularjs.js:43) 
    at angularjs.js:45 

我採用了棱角分明的UI路由器嵌套views.I下面我解釋我的代碼。

profile.html:

<div class="col-lg-12"> 
<div class="portlet portlet-blue" style="margin-bottom:12px;"> 
<div class="portlet-body"> 
<div class="table-responsive dashboard-demo-table"> 
<table class="table table-bordered table-striped table-hover" id="dataTable" > 
<colgroup> 
<col class="col-md-1 col-sm-1"> 
<col class="col-md-2 col-sm-2"> 
<col class="col-md-2 col-sm-2"> 
<col class="col-md-2 col-sm-2"> 
<col class="col-md-2 col-sm-2"> 
<col class="col-md-2 col-sm-2"> 
<col class="col-md-1 col-sm-1"> 
</colgroup> 
<thead> 
<tr> 
<th>Sl. No</th> 
<th>College Name</th> 
<th>Address</th> 
<th>Contact No</th> 
<th>Edit</th> 
</tr> 
</thead> 

<tbody id="detailsstockid"> 
<tr ng-repeat="profile in profileData"> 
<td>{{$index+1}}</td> 
<td>{{profile.colg_name}}</td> 
<td>{{profile.address}}</td> 
<td>{{profile.cont_no}}</td> 
<td> 
<a ui-sref='.profile?p_i={{profile.profile_id}}'> 
<input type='button' class='btn btn-xs btn-green' value='Edit'> 
</a> 
</td> 
</tr> 
</tbody> 
</table> 
</div> 
</div> 
<div class="clearfix"></div> 
</div> 
</div> 

該文件將在下文中給出的dashboard.html頁面內結合。

dashboard.html:

<a ui-sref=".profile" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">College profile<span class="caret"></span></a> 
<div class="row" style="padding-top:90px;" ui-view> 

     </div> 

loginRoute.js:

var Admin=angular.module('Channabasavashwara',['ui.router']); 
Admin.config(function($stateProvider, $urlRouterProvider) { 
    $urlRouterProvider.otherwise('/'); 
    $stateProvider 
    .state('/', { 
      url: '/', 
      templateUrl: 'dashboardview/login.html', 
      controller: 'loginController' 
     }) 
     .state('dashboard', { 
      url: '/dashboard', 
      templateUrl: 'dashboardview/dashboard.html', 
      controller: 'dashboardController' 
     }) 
     .state('dashboard.profile', { 
     url: '/profile', 
     templateUrl: 'dashboardview/profile.html', 
     controller: 'profileController' 
    })   
}) 

profileController.js:

var dashboard=angular.module('Channabasavashwara'); 
dashboard.controller('profileController',function($scope,$http,$location){ 
    var id=gup("p_i"); 
    $http({ 
     method: 'GET', 
     url: "php/profile/readProfileData.php", 
     headers: { 'Content-Type': 'application/x-www-form-urlencoded' } 
    }).then(function successCallback(response){ 
     $scope.profileData=response.data; 
    },function errorCallback(response) { 

    }); 
    if(id != ''){ 
     $scope.buttonName="Update"; 
     var userdata={'userid':id}; 
     $http({ 
      method: 'POST', 
      url: "php/profile/editProfileData.php", 
      data: userdata, 
      headers: { 'Content-Type': 'application/x-www-form-urlencoded' } 
     }).then(function successCallback(response){ 
      console.log('edited data',response); 
      $scope.colgname=response.data[0].colg_name; 
      $scope.address=response.data[0].address; 
      $scope.contno=response.data[0].cont_no; 
     },function errorCallback(response) { 
     }); 
    }else{ 
     $scope.buttonName="Submit"; 
    } 
    $scope.addProfileData=function(){ 
     if($('#addProfileData')[0].defaultValue=='Submit'){ 
     if($scope.colgname==null){ 
      alert('course name field could not blank'); 
     }else if($scope.address==null){ 
      alert('short name field could not blank'); 
     }else if($scope.contno==null){ 
      alert('semester field could not blank'); 
     }else{ 
     var userdata={'colg_name':$scope.colgname,'address':$scope.address,'cont_no':$scope.contno}; 
     //console.log('userdata',userdata); 
     $http({ 
      method: 'POST', 
      url: "php/profile/addProfileData.php", 
      data: userdata, 
      headers: { 'Content-Type': 'application/x-www-form-urlencoded' } 
     }).then(function successCallback(response){ 
      console.log('profile',response); 
      alert(response.data['msg']); 
      $scope.colgname=null; 
      $scope.address=null; 
      $scope.contno=null; 
      $scope.profileData.unshift(response.data); 
     },function errorCallback(response) { 
      alert(response.data['msg']); 
     }) 
     } 
     } 
     if($('#addProfileData')[0].defaultValue=='Update'){ 
      var updatedata={'colg_name':$scope.colgname,'address':$scope.address,'cont_no':$scope.contno,'profile_id':id}; 
      console.log('userupdate',userdata); 
      $http({ 
      method: 'POST', 
      url: "php/profile/updateProfileData.php", 
      data: updateData, 
      headers: { 'Content-Type': 'application/x-www-form-urlencoded' } 
     }).then(function successCallback(response){ 
      alert(response.data); 
      $location.path('profile'); 
     },function errorCallback(response) { 
      alert(response.data); 
     }); 
     } 
    } 
}) 
function gup(name) { 
    name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]"); 
    var regexS = "[\\?&]"+name+"=([^&#]*)"; 
    var regex = new RegExp(regexS); 
    var results = regex.exec(window.location.href); 
    if(results == null) 
     return ""; 
    else 
     return results[1]; 
} 

這裏的時候,我正在編輯按鈕profile.html頁面點擊此錯誤來了。點擊後我需要再次移動到同一個配置文件頁面。請幫我解決這個錯誤。

回答

2

a working example

輕鬆地說:

relative path could be used only in a proper context...

因此,內部意見的狀態'dashboard'的:

.state('dashboard', { 
    url: '/dashboard', 
    templateUrl: 'dashboardview/dashboard.html', 

Namily在這種情況下,考慮到內「dashboardview /dashboard.html' - 我們可以使用實際路徑:

<a ui-sref='.profile?p_i={{profile.profile_id}}'> 

,因爲它會得到妥善的起始部分:

current state ('dashboard') + relative path '.profile' === 'dashboard.profile'

任何其他國家,我們會得到不同的結果 - 相對路徑。晴瞄準不存在的美國...

EXTEND:讓它運行(後來與國家有關的名字玩)我會建議使用絕對州名:

// instead of this 
<a ui-sref='.profile?p_i={{profile.profile_id}}'> 
// I'd use this 
<a ui-sref='dashboard.profile'> 

併成爲能夠消耗的參數,我們應該擴大國家確定指標與網址PARAM:

.state('dashboard.profile', { 
     url: '/profile?profileId', 
     // or 
     url: '/profile/:profileId', 
     templateUrl: 'dashboardview/profile.html', 
     controller: 'profileController' 

,然後我們可以通過PARAM這樣

<a ui-sref='dashboard.profile({profileId:profile.profile_id})'> 

a working example

+0

@ Ramdim:所以我會改變,這樣它會按照工作的要求。 – satya

+0

我會從絕對名稱''dashboard.profile''開始,查看我的擴展答案... –

+0

@ Ramdim:我會在'a ui-sref =「dashboard.profile」'中寫下這個對吧? – satya