2016-05-02 2 views
13

У меня есть приложение, которое использует селектор portfolio-app и имеет 2 таблицы стилей - '../app/styles/templateMobile.css', '../app/styles/templateOther.css'Angular2 не вводить шаблон CSS при обновлении страницы

Теперь, когда я открываю мое приложение с URL по умолчанию (локальный: 3000 ATM), то Таблицы стилей применяются правильно. Но когда я перехожу на другой маршрут и нажимаю refresh (F5), стили шаблона не применяются к странице. То же самое происходит, когда я начинаю по другому маршруту.

В консоли нет сообщений об ошибках.

Я проверил это в firefox, chrome и safari, режиме инкогнито и очистил кеш браузера. Я также тестировал на LG G2, iPhone, iPad и различные эмуляторы Android (Nexus 9, Nexus 10, Galaxy Nexus). Все время результат тот же.

app.component:

import { Component } from 'angular2/core'; 
import {ViewEncapsulation} from 'angular2/core'; 
import { ROUTER_PROVIDERS, ROUTER_DIRECTIVES, RouteConfig } from 'angular2/router'; 

import { LandingComponent } from './landing.component'; 
import { PortfolioComponent } from './portfolio.component'; 
import { PagesService } from './pages.service'; 

@Component({ 
    selector: 'portfolio-app', 
    templateUrl: '/app/views/template.html', 
    styleUrls: ['../app/styles/templateMobile.css', '../app/styles/templateOther.css'], 
    encapsulation: ViewEncapsulation.None, 
    directives: [ROUTER_DIRECTIVES], 
    providers: [ROUTER_PROVIDERS, PagesService] 
}) 

@RouteConfig([ 
    { path: '/landing', name: 'Landing', component: LandingComponent, useAsDefault: true }, 
    { path: '/portfolio', name: 'Portfolio', component: PortfolioComponent } 
]) 

export class AppComponent { 
    landing = true; 
    portfolio = false; 

    changeMiniNavLanding = function() { 
     this.landing = true; 
     this.portfolio = false; 
    } 

    changeMiniNavPortfolio = function() { 
     this.landing = false; 
     this.portfolio = true; 
    } 
} 

main.ts:

import {bootstrap} from 'angular2/platform/browser'; 
import {AppComponent} from './app.component'; 

bootstrap(AppComponent); 

Если вам нужна дополнительная информация, пожалуйста, обратитесь, или просмотреть корыта gitHub хранилище. (все соответствующие файлы находятся в папке приложения).

Спасибо за помощь.

+0

У вас возникли ошибки в консоли браузера? –

+0

Нет, просто стандартное сообщение, что Angular 2 работает в режиме разработки –

ответ

7

Я клонировал ваш репозиторий, ваши стили загружаются хорошо. Проблема, с которой вы сталкиваетесь, не связана с введением CSS. Это связано с «если вы не возражаете, что я говорю« плохой дизайн и не использую ViewEncapsulation ».

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

Объяснение
Если вы не используете вид инкапсуляции, каждый CSS импорта будет придерживаться на странице, пока вы не обновите его. Он никогда не будет удален. И он будет применяться к любому элементу на странице, к которому он относится. И поскольку он вставлен только при посещении соответствующего component/route, при обновлении страницы некоторые CSS не вводятся на страницу, потому что вы не посещали компонент, на котором он был включен.

Я возьму класс appContainer в качестве примера, чтобы помочь объяснить проблему.

В styles/landingOther.css у вас есть:

.appContainer { 
    width: 60%; 
} 

Поскольку маршрут по умолчанию /landing, когда вы посещаете страницу http://localhost:3000/, то .appContainer класс будет закачиваться на страницу и будет оставаться на странице, пока не обновят. Итак, когда вы направляетесь в /portfolio, appContainer все еще вводится на страницу, и он будет применяться. Но, когда вы напрямую переходите на , компонент landing никогда не посещается, поэтому класс .appContainer не был введен на страницу, поэтому он не будет применяться.То же самое касается и других классов. Надеюсь, вы получите логику.

Кроме того, неправильное примечание, связанное с точкой, имя файла css в вашем portfolio.component.ts. Это в капитале, в то время как фактический файл небольшой.

+0

Эй, вся причина, по которой я использую инкапсуляцию отображения, - это http://stackoverflow.com/questions/36224276/ angular2 добавляющие-ngcontent-MAV-х-к-стилей. Итак, вы бы предположили, что я просто использую одну таблицу стилей и применяю ее к моему корневому компоненту? –

+0

@ MihaŠušteršič Основываясь на том, как вы определяете свои стили. Я предлагаю вам поместить его в index.html, как обычный css из компонентов. И удалите 'ViewEncapsulation.None', потому что он применяется только в том случае, если в компоненте есть css. – Abdulrahman

+0

@ MihaŠušteršič Другими словами, если у вас есть компонент, который вы хотите изолировать от глобального css, определенного в 'index.html'. Добавьте некоторые стили в 'styles' или' styleUrls'. Если вы не хотите, чтобы он был изолирован, не добавляйте к нему никаких стилей. – Abdulrahman

1

удалить ведущие '..'?

styleUrls: ['/app/styles/templateMobile.css', '/app/styles/templateOther.css'] 

или родственник

['./styles/templateMobile.css', './styles/templateOther.css'] 
+0

, это просто тормозит инъекцию css. Angular2 в настоящее время работает только с относительным путем - проверьте http://stackoverflow.com/questions/35188803/angular-2-external-style-doesnt-get-inlined-to-header –

+0

попробуйте ['./styles/templateMobile.css' , './styles/templateOther.css'] – IgorL

+0

по-прежнему та же проблема, css будет загружаться, тогда, когда я изменю маршрут и обновляюсь, его нет –

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