2015-04-16 4 views
2

У меня есть меню, отображающее разные группы. Имя, к которому принадлежит пользователь. Я подготовил шаблонную страницу, так что, когда пользователь выбирает одну из групп меню, изменяются поля шаблона.

<li><a href="#"><i class="glyphicon glyphicon-folder-open"></i>Home </a></li> 
<li><a data-toggle="collapse" ng-init="getAllGroupsofUser()"data-target="#groups">My Groups</a> 
    <ul id="groups" class="collapse"> 
     <li ng-repeat="group in groupsofUser" ng-controller="groupsCTRL"><a 
      ng-click="openPage(group)">{{group.name}}</a> 
     </li> 
    </ul> 
</li> 

Группы были успешно показаны в меню. Я использую ng-view и $ routeProvider.

мой $ routeProvider

app.config(['$routeProvider', 
    function($routeProvider) { 
    $routeProvider 
     .when('/', { 
     templateUrl: 'home.html', 
     controller:"MyController" 
     }) 
     .when('/group/:groupname', { 
     templateUrl: "groupTemplate.html", 
     controller:"groupsCTRL" 
     }). 
     otherwise({ 
     redirectTo: '/' 
    }); 
}]); 

мой контроллер

app.controller('groupsCTRL',[ '$scope', '$http' , '$location', '$routeParams' ,function($scope, $http,$location,$routeParams){ 

    $scope.groupeName= $routeParams.groupname; 

    $scope.openPage = function(group) { 
     $scope.groupselected = group; 
      console.log("group: "+$scope.groupselected.id); 
      location.href = "#/group/"+group.name; 
    } 

}]); 

мой шаблон

<div class="row" > 
     <h1 class="page-header">Groupe {{groupeName}} </h1> 
</div> 
<div class="row"> 
    {{groupselected.id}} 
</div> 

моя проблема заключается в том, что отображается groupeName, но groupselected.id отображается только в консоль (потому что я использовал console.log("group: "+$scope.groupselected.id);)

, пожалуйста, помогите мне, мне нужно знать, была ли группа передана на страницу, потому что на следующем этапе мне нужно будет показать информацию об этой выбранной группе.

+2

вам нужно использовать '$ location.path (" #/group/"+ group.name);' вместо 'location.href =" #/group/"+ group.name;' –

+0

Я изменил его на $ location.path ("#/group /" + group.name); но таким образом URL-адрес не изменился, и моя страница не была вызвана – Yuri

+0

, в основном вам нужно называть '$ scope. $ apply()' после нее, будет работать для вашего дела –

ответ

2

я решил мою проблему, создав новый RESTful веб-службы, чтобы получить группу по имени (так как это уникальный)

//get Group by Name 
     $scope.getGroupByName = function(groupname){ 
       $scope.group=[]; 
      $http({method: 'GET', url: '/getGroupByName/'+groupname}). 
      success(function(result) { 
       $scope.group = result.data; 
        }). 
        error(function(data, status, headers, config) { 
         // called asynchronously if an error occurs 
         // or server returns response with an error status. 
        }); 
      }; 

, к которому я могу передать мою groupeName и получите группу

1

Использовать $location.path вместо location.href. Также, чтобы применить изменения местоположения, &, вам необходимо запустить цикл дайджеста.

Код

$scope.openPage = function(group) { 
    $scope.groupselected = group; 
    console.log("group: "+$scope.groupselected.id); 
    $location.path("/group/"+group.name); 
    if(!$scope.$$phase) $scope.$apply(); 
}; 
+0

спасибо, но это точно так же, как и мое решение. Невозможно показать groupselected на странице – Yuri

+0

@marwa Вы нашли какое-либо решение на этом ? –

+0

ну, я создал новую веб-службу RESTful, чтобы получить группу по имени (так как я могу получить имя '$ scope.groupeName = $ routeParams.groupname' и это уникально), а затем я могу получить всю информацию о группе – Yuri

Смежные вопросы