2014-05-22 6 views
3

У меня есть веб-приложение, которое, похоже, не работает вообще, если я попытаюсь использовать подход ngRoute для изменения основного вида страницы. Конфигурации маршрутизации выглядит следующим образом:ngRoute, похоже, не работает

var app; 
app = angular.module('genehaxx', ['ngGrid','ngRoute', 'ngSanitize', 'ui.bootstrap','genehaxx.filters', 'genehaxx.services']) 
.config(function($routeProvider){ 
     //route setup 
    $routeProvider 
    .when('/workflows', { 
     templateURL: '/partials/workspace_view.html', 
     controller: 'MainController' 
    }) 

    .when('/jobs', { 
     templateURL: '/partials/submissions_view.html' , 
     controller: 'MainController' 
    }) 

    .when('/', { 
     templateURL: '/partials/analyses_view.html', 
     controller: 'MainController' 
    }) 

    .when('/analyses', { 
      redirectTo: '/' 
     }) 

    .otherwise({ 
      redirectTo: '/' 
    }); 

}); 

function MainController($scope, $modal, $rootScope, User, Data, Workflow, Step){ 
    //lots of proprietary code here.. 
} 

Я попробовал это и без «/» перед частичными. Я попробовал это как с обычным веб-сервером, обращенным прокси под nginx, так и непосредственно под http-сервером из его каталога. В обоих случаях нет никаких доказательств того, что страницы с частицами запрашиваются с сервера. Основной вид немного волосатые сообщения в полном объеме, но соответствующие биты выглядеть следующим образом:

<!doctype html> 
<html lang="en" ng-app="genehaxx" > 
<head> 
    <meta charset="utf-8"> 
    <title>Welcome to Genengine!</title> 
    <link href="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/2.3.1/css/bootstrap.min.css" rel="stylesheet" /> 
    <link rel="stylesheet" href="css/app.css"/> 
    <link rel="stylesheet" href="css/ng-grid.css"> 

    <script src="lib/jquery-2.0.2.js"></script> 
    <script src="libs/angular/angular.js"></script> 
    <script src="libs/angular-route/angular-route.min.js"></script> 
    <script src="libs/angular-sanitize/angular-sanitize.js"></script> 
    <script src="lib/transition.js"></script> 
    <script src="lib/bootstrap-custom/ui-bootstrap-custom-tpls-0.10.0.js"></script> 
    <script src="lib/ng-grid-2.0.7.debug.js"></script> 
    <script src="js/app.js"></script> 
    <script src="js/filters.js"></script> 
    <script src="//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.6.0/underscore.js"></script> 
    <script src="js/objects.js"></script> 
    <script src="js/services2.js"></script> 
    <script src="js/dropdownToggle.js"></script> 
</head> 
<body> 
    <div id="main"> 
    <div ng-view></div> 
    </div> 
</body> 
</html> 

Я остановился NavBar вещи, как, кажется, не имеет значение, и я получаю те же результаты, щелкнув по нему или непосредственно введя URL с #без разницы. Каталоги/libs имеют самую последнюю угловую, угловую маршрутизацию, ангулярную санитацию от беседки.

Небольшие образцы, которые я пытался подключить к своим библиотекам, и частичные работы, похоже, работают, что еще более расстраивает. Я был в тупике в течение нескольких дней. Я взломал его в производстве с беспорядком ng-includes и некоторым «умным» кодом, но я предпочел бы получить эту работу. Что-нибудь выскочит? Когда я говорю, что это не сработает, я имею в виду, что я не вижу никаких доказательств того, что какая-либо маршрутизация произошла в том, что эти частичные запросы никогда не запрашиваются с сервера.

+0

Если вы вручную перейдете к URL: 'http://yourserver.com/partials/workspace_view.html' в вашем браузере, правильно ли он загружает частичный? – GregL

+0

вы можете добавить код контроллера, так как это поможет увидеть, есть ли там проблемы, из-за чего маршрутизация не работает. –

+0

Вы загружаете MainController дважды. Один раз в и снова для каждого вида. Не уверен, что это хорошая идея. – aet

ответ

5

Вы опечатки в ваших when звонков:

Пример:

templateURL: '/partials/workspace_view.html', 

должны быть

templateUrl: '/partials/workspace_view.html', 

(обратите внимание на разницу в шапочках, шаблонURL изменяется на templateUrl)

+0

D'oh! Это templateUrl, и я использовал templateURL всюду. Человек, я чувствую себя глупым. Всем спасибо. Это исправило это. –

+0

Я нашел его путем копирования/вставки вашего кода в Plunker, чтобы сделать абстрактную версию вашего приложения, которое, как я знал, не было связано с зависимостями файлов или кода. Тогда я знал, что в вашем демо-коде есть что-то в этом роде, и просто поближе посмотрел. Я упоминаю это все, просто сказать, что переписывание соответствующих битов вашего кода для изоляции проблемы может быть очень полезно :) –

1

Пара вещей

1 - Stringify MainController

.

$routeProvider 
.when('/workflows', { 
    templateURL: '/partials/workspace_view.html', 
    controller: 'MainController' 
}) 

.when('/jobs', { 
    templateURL: '/partials/submissions_view.html' , 
    controller: 'MainController' 
}) 

.when('/', { 
    templateURL: '/partials/analyses_view.html', 
    controller: 'MainController' 
}) 

.when('/analyses', { 
    redirectTo: '/' 
}) 

.otherwise({ 
    redirectTo: '/' 
}); 

2 - Вам не нужно ng-controller на body. ngRoute привяжет контроллер к виду для вас. Тем не менее, убедитесь, что у вас есть MainController определенные в приложении, в противном случае Угловой выдаст ошибку у вас

+0

Спасибо. Не знаю, как они были нераскрыты. Но исправление не имеет значения. Рабочие примеры, с которыми я играл, иногда имеют контроллер, определенный в основном представлении, а иногда и нет. Кажется, не имеет никакого значения в любом случае. –

+0

Вы также можете попробовать положить 'ng-app' в тег' body'. Я никогда не видел, чтобы это определялось на 'html' раньше, и это может решить вашу проблему. – bioball

0

Я вижу, что решение @Mark Kline решило вашу проблему, но я хотел бы сделать предложение, которое может помочь вам в долгосрочной перспективе.

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

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

+0

Спасибо. Это частично сложно, потому что, когда я это написал, я тоже не знал углов. Я также выставил некоторые вещи на уровне уровня $, который сделал просмотр более гладким без каких-либо жалоб, что то, что он пересматривал, часто было слишком тяжелым. Есть и другие способы повлиять на те, что я знаю сейчас, как делать больше на фабриках и службах, чем раньше. Но, откровенно говоря, я все еще пугаюсь сумасшедшим сумасшествием anguraljs. Не так просто узнать, что есть и не видно в цепочке $ parent, особенно в директивах. Больше учить делать, я думаю. –

+0

Всегда помните, что вам нужны объекты только в области, если они будут использоваться в dom. Если объект не нужен dom, тогда используйте классическое закрытие, чтобы сохранить глобальное пространство имен незагрязненным. Кроме того, сервисы/фабрики и директивы являются вашими друзьями и обеспечивают надлежащее дублирование и повторное использование кода во всем коде. –

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