2014-05-25 141 views
0

Angularjs導航項目我有我的base.html文件:呼叫詳細信息視圖

<div ng-controller=NavCtrl> 
     <nav> 
      <a ng-click="getWork(work)" ng-repeat='work in works'>{{$index+1}}</a> 
     </nav> 
</div> 

我的路由器:

.config(function($routeProvider) { 
    $routeProvider 
    .when('/ardiye/:workNo', { 
     controller:'DetailCtrl', 
     templateUrl:'/static/web/js/api/templates/detail.html' 
    }); 
}) 

而且我contrrollers:

.controller('NavCtrl', function($scope, $location, $http) { 
    $scope.works = []; 
    $http({method: 'GET', url: '/api/v1/work'}). //collects all works 
    success(function(data, status, headers, config) { 
     $scope.works = data.objects; 
    }); 

    // Trying to pass the selected work to new view, how? 
    $scope.getWork = function(work) { 
    $scope.selectedWork=work; 
    $location.path('/ardiye/'+work.id+'/') }; 

}) 

.controller('DetailCtrl', function($scope) { 
// here i have to get the selectedWork, how? 

}) 

detail.html:

<h1>{{selectedWork.title}}</h1> 

導航控制器發送作品列表。然後當點擊鏈接時,我想通過路由器將工作對象發送到新的細節控制器(爲了不再發起服務器調用)。

但是,當點擊鏈接'getWork'功能不能被調用,我不能將工作對象發送到詳細控制器。我怎樣才能做到這一點?

回答

0

包括$位置服務在您的控制器,一旦你有你的工作對象只需調用

$location.path('ardiye/'+id); 

您嘗試以下鏈接之前調用的函數,這將無法正常工作。

+0

我cuould不讓它通過增加$ location.path工作... – ratata

+0

你做了什麼?你可以發佈你的代碼和平? –

1

在控制器之間共享數據的最常見方式是使用服務來完成。在這種特殊情況下,這個簡單的代碼應該工作:

app.config(['$routeProvider', function($routeProvider){ 
    $routeProvider 
     .when('/ardiye', {templateUrl: 'page1.html', controller: 'View1Ctrl'}) 
     .when('/ardiye/:id', {templateUrl: 'page2.html', controller: 'View2Ctrl'}) 
     .otherwise({redirectTo: '/ardiye'}) 
}]); 

app.factory('WorkService', [function(){ 
    var WorkService = {}; 
    WorkService.data = { SOMEIDFORITEM1: {id: "SOMEIDFORITEM1", content: "some content"}, SOMEIDFORITEM2: {id: "SOMEIDFORITEM2", content: "some content"}}; 
    WorkService.someMethod = function(){}; //in case you also need to share logic 
    return WorkService; 
}]); 

app.controller('View1Ctrl'. ['$scope', 'WorkService', function($scope, WorkService){ 
    $scope.workService = WorkService; 
    $scope.works = $scope.workService.data; 
}]); 

app.controller('View2Ctrl'. ['$scope', '$routeParams', 'WorkService', function($scope, $routeParams, WorkService){ 
    $scope.workService = WorkService; 
    $scope.currentWork = $scope.workService.data[$routeParams.id]; 
}]); 

乾杯

+0

你覺得@Dayan $ location.path的答案是另一個解決方案嗎?我曾嘗試過,但無法使$ location.path工作? – ratata

+0

我已經更新了我的問題...你還認爲我必須使用服務嗎? – ratata

相關問題