template start sref example change javascript angularjs views angular-ui-router

javascript - start - Variable ui-router angular en vista anidada



ui-sref angularjs example (1)

La aplicación de muestra del UI-Router usa este código:

ui-router / sample / app / app.js

.run( [ ''$rootScope'', ''$state'', ''$stateParams'', function ($rootScope, $state, $stateParams) { // It''s very handy to add references to $state and $stateParams to the $rootScope // so that you can access them from any scope within your applications.For example, // <li ng-class="{ active: $state.includes(''contacts.list'') }"> will set the <li> // to active whenever ''contacts.list'' or one of its decendents is active. $rootScope.$state = $state; $rootScope.$stateParams = $stateParams; }])

Y eso significa que con los data : {} función:

Adjunte datos personalizados a objetos de estado

Puede adjuntar datos personalizados al objeto de estado (recomendamos utilizar una propiedad de datos para evitar conflictos).

// Example shows an object-based state and a string-based state var contacts = { name: ''contacts'', templateUrl: ''contacts.html'', data: { customData1: 5, customData2: "blue" } }

Podemos hacer esto:

.state(''in-app'', { parent: ''app'', abstract: true, views: { ''nav@app'': { ''...'' }, ''header@app'': { ''...'' } } data: { title : "my title" }, })

Y úsalo en alguna plantilla como:

<div>{{$state.current.data.title}}</div>

Un resumen

  • Podemos colocar state y params en $ rootScope, para que podamos acceder sin ningún controlador.
  • Podemos declarar algunas cosas más personalizadas a través de data y usarlas como un título ... anyhwere

Actualmente estoy trabajando en una aplicación donde tengo varias vistas anidadas, que se ven así:

- ui-view - ui-view="header" - ui-view="nav" - ui-view="body"

Mis estados se definen de la siguiente manera:

.state(''index'', { url: '''', // default route templateUrl: ''welcome.html'' }) .state(''app'', { abstract: true, templateUrl: ''app.template.html'' // This template contains the 3 different ui-views }) // I''m using a different state here so I can set the navigation and header by default .state(''in-app'', { parent: ''app'', abstract: true, views: { ''nav@app'': { ''...'' }, ''header@app'': { ''...'' } } }) // In-app routes .state(''dashboard'', { parent: ''in-app'', url: ''/app/dashboard'' views: { ''body@app'': { ''...'' } } }) .state(''users'', { parent: ''in-app'', url: ''/app/users'' views: { ''body@app'': { ''...'' } } }) .state(''settings'', { parent: ''in-app'', url: ''/app/settings'' views: { ''body@app'': { ''...'' } } })

Por el momento, esto funciona muy bien, pero para las in-app routes me gustaría definir un título que se muestra en la vista del header@app .
Cuál sería la mejor forma de hacer esto? Por el momento, solo puedo pensar en establecer una variable en $rootScope o enviar un evento. Pero para los dos necesitaría un controlador.

¿Hay alguna manera de que pueda hacer esto directamente desde la configuración de mi ruta?