castillo-io / angular-css

CSS on-demand for AngularJS [Looking for New Maintainers]
http://castillo-io.github.io/angular-css/#/
MIT License
470 stars 86 forks source link

Reload Page - Parent Css not applied to child - UI Router #55

Open Coyzz opened 8 years ago

Coyzz commented 8 years ago

Hello,

When we reload the page on a child state (like /home/profile), the parent css (home.css) is not applied to the child.

Is there a way to persist the css on reload ?

Thanks !

slavafomin commented 8 years ago

Yes, I have the same problem. It looks like module doesn't support property inheritance from the parent states. Actually this is very sad, because without this feature this module has no value to our project. We can't repeat the same definition of styles for every route, this just makes no sense.

Are you planning to implement inheritance?

slavafomin commented 8 years ago
  1. We could build the chain of states from the current state to the topmost.
  2. Iterate through the reversed chain, i.e. from topmost state to the current.
  3. When each state is visited add all encountered CSS files to the end of the list, which is empty initially.

In the end we will have the complete list of all CSS files from top state to bottom.

Of course we will also need a mechanism to override some CSS files, this could be very useful when working with different layouts. We can introduce the concept of named styles.

Example

stateHelperProvider
  .state({
    name: 'root',
    abstract: true,
    css: [
      'bootstrap.css',
      {
        name: 'layout', // <==========  NAMED STYLE
        href: 'primary-layout.css'
      }
    ]
  })
  .state({
    name: 'foo',
    parent: 'root',
    css: 'foo.css'
  })
  .state({
    name: 'bar',
    parent: 'root',
    css: [
      {
        name: 'layout',
        href: 'alternative-layout.css' // <==========  OVERRIDING THE NAMED STYLE!
      },
      'bar.css'
    ]
  })
;

What do you think @alexandercastillo?

ujwaldhakal commented 4 years ago

its not working for me either