3

Я хотел бы загрузить контроллер, когда я перехожу от одного вида к другому.Каков самый простой способ загрузки контроллера при изменении вида?

Например, я нахожусь на главной странице, и пользователь хочет перейти на страницу входа в систему. У меня есть LoginController в файле, который не включен в app.js (основной скрипт AngularJS), который я хочу загрузить, только если пользователь переходит на страницу входа.

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

Спасибо.

ответ

1

Возможно, вам понадобится ng-route. Это модуль, который делает именно то, что вы хотите. (Наряду с другими функциями. ->ngRoute можно определить маршруты следующим способом

var app = angular.module('app ', []); 
app .config(['$routeProvider', 
    function($routeProvider) { 
    $routeProvider. 
    when('/login', { 
     templateUrl: 'login.html', 
     controller: 'loginController' 
    }). 
    when('/home', { 
     templateUrl: 'home.html', 
     controller: 'homeController' 
    }). 
    otherwise({ 
    redirectTo: '/home' 
    }); 
}]); 

Кроме того, вы должны объявить LoginController, но не волнуйтесь, контроллер разрушается, если изменить его вид. был обязан, и воссоздан при открытии LoginPage снова.

+0

Нет. Они по-прежнему требуют, чтобы вы загрузили их перед началом работы. Сценарий контроллера ... с другой стороны может быть ленив загружен. – Minato

0

ОДНОВАЛЮТНОГО Страница-приложение, которое AngularJS является основой для, загружает все свои представления и c ода заранее. Это обеспечивает быстрое и плавное применение стоимости (бит) большего времени загрузки. Поскольку код не предназначен для динамического загрузки с помощью AngularJS, вы не найдете чистого решения для этого. Кроме того, я не вижу причин, чтобы сделать это в первую очередь. Пока ваше приложение не является одним из самых больших приложений, он просто не имеет смысла загружать контроллеры динамически. Если вы поместите весь свой код вместе в один файл и свести его к минимуму, что вы должны делать в любом случае, загрузка ваших контроллеров будет наименьшей из ваших проблем. Скорее всего, все в одном файле и получить его одним запросом, чем динамически загружать между представлениями, поэтому архитектура SPA теперь используется все чаще и чаще.

Мой совет: не делайте этого, не пробуйте. Это так, как и по причинам, и это хорошо, как есть :)

Однако, если вы действительно этого хотите сделать, единственный способ сделать это - сделать все по-своему: Загрузка сценария, создание экземпляра контроллера и т. Д. .

+0

просмотров не загружают перед рукой ... код с другой стороны может быть ленив загружен ... если не загружен до начала игры .. основные компоненты, такие как контроллеры, модули, директивы и т. д. (все еще не все из них) загружаются, так как приложение требует их загрузки вместе с самим приложением ... – Minato

+0

Да, вы правы. фактические представления не загружаются угловыми, а шаблонами для каждой директивы (компонента). но если ваша структура кода основана на компонентах, что я рекомендую, вы как бы загружаете около 98% своего приложения перед рукой (потому что фактическое представление состоит не из нескольких, а из некоторых компонентов) , но я все равно не буду рекомендуется динамически загружать угловой код, если вы не столкнетесь с реальными проблемами производительности в начале вашего приложения. что не распространяется на почти все приложения там. –

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