2014-08-28 29 views
0

我第一次使用AngularUI路由器框架,並想知道如何改進下面的代碼。角ui路由器 - 多次使用相同的templateUrl和控制器

基本上這一切都正常工作,但最終(在我正在研究的項目中)將會有20個問題或更多,我不想爲每個州聲明相同的'templateUrl'&'控制器'。

下面是什麼我的意思是削減版本:

的index.html

<div ui-view></div> 

questions.html

<a ui-sref="q1">q1</a> 
<a ui-sref="q2">q2</a> 

<div ng-show="$state.current.name === 'q1'">q1. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec odio. Quisque volutpat mattis eros. Nullam malesuada erat ut turpis. Suspendisse urna nibh, viverra non, semper suscipit, posuere.</div> 

<div ng-show="$state.current.name === 'q2'">q2. Donec nec justo eget felis facilisis fermentum. Aliquam porttitor mauris sit amet orci. Aenean dignissim pellentesque felis.</div> 

app.js

angular.module('foo', ['ui.router']) 

.config(function($stateProvider, $urlRouterProvider) { 

    $urlRouterProvider.otherwise('/'); 

    $stateProvider 

    .state('q1', { 
     url: '/', 
     templateUrl: 'questions.html', 
     controller: 'questionsCtrl' 
    }) 

    .state('q2', { 
     url: '/q2', 
     templateUrl: 'questions.html', 
     controller: 'questionsCtrl' 
    });  

}) 

.controller('questionsCtrl', function($scope, $state) { 

    $scope.$state = $state; 

}); 

; 

我想遵循最佳實踐並儘可能保持app.js的小/可管理性。

乾杯

+0

這怎麼可能,他們使用相同的templateUrl /控制器,如果它們是不同的問題嗎? – Wawy 2014-08-28 08:13:57

+0

你真的以錯誤的方式接近這個問題,但這是一個非常深入的話題,值得多一個帖子。如果你想討論你在做什麼,我建立了一個聊天室http://chat.stackoverflow.com/rooms/60150/angular-js-routing-discussion。 – Claies 2014-08-28 08:20:32

+0

@Wawy因爲問題來自json並且處於一個大的ng-repeat(爲了方便起見,我簡化了它)爲每個問題提供一個url,當人們點擊後或需要指向特定q的鏈接時。 – Adi 2014-08-28 08:26:48

回答

1

在聊天中進行了一些討論後,我們能夠使用狀態參數構建功能plunker

HTML:

<a ui-sref="question({questionID:'q1'})">q1</a> 
<a ui-sref="question({questionID:'q2'})">q2</a> 

{{questionID}} 

<div ng-show="questionID == 'q1'">q1. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec odio. Quisque volutpat mattis eros. Nullam malesuada erat ut turpis. Suspendisse urna nibh, viverra non, semper suscipit, posuere.</div> 

<div ng-show="questionID == 'q2'">q2. Donec nec justo eget felis facilisis fermentum. Aliquam porttitor mauris sit amet orci. Aenean dignissim pellentesque felis.</div> 

app.js:

.state('question', { 
     url: '/:questionID', 
     templateUrl: 'questions.html', 
     controller: 'questionsCtrl' 
}) 

.controller('questionsCtrl', function($scope, $stateParams) { 

    //$scope.$state = $state; 
    $scope.questionID = $stateParams.questionID; 

}); 

談話聊天的是http://chat.stackoverflow.com/transcript/60150