Angular ui-router重新加载ng-include外部ui-view

时间:2014-09-24 08:40:01

标签: angularjs angular-ui-router angularjs-ng-include

可能这是整个布局错了,但这是我的情况,我正在使用带有Angular ui-router的Meanjs.org堆栈。

我有这样的布局:

<div data-ng-include="'/modules/core/views/header.client.view.html'"></div>

<div id="page-content" class="clearfix" fit-height>
    <div id="wrap" data-ui-view="" class="mainview-animation"></div>
</div>

现在我需要在更改$状态时在header.client.view.html中重新加载控制器。

例如,当我在登录页面并登录时,我需要重新加载标头控制器,但是这样做是不可能的,因为ui-router仅使用相对模板更改ui-view部分:< / p>

// this change only ui-view, doesn't care about the ng-include before    
state('home', {
    url: '/',
    templateUrl: 'modules/core/views/home.client.view.html',
});

我发现有可能向状态添加更多ui-view,所以我可以使用ng-include为头添加ui-view2,但这意味着在每个状态上都有ui-view2。

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

您可能不需要重新加载控制器&#34;每次状态改变时,都会让控制器动态响应状态变化并更新其属性。

查看ui-router $stateChangeSuccess event

答案 1 :(得分:2)

首先,你需要听@Matti Virkkunen 用#34; $ stateChangeSuccess&#34;

监听标题控制器中的状态会更好

所以你只需要为你的标题声明一个控制器。在你的标题控制器里面添加这样的东西。

 $scope.$on('$stateChangeSuccess', function () {
    // Do what you want for example check if the current state is home with $state.is('home');
 });

不要忘记在模板中声明控制器

<div data-ng-controller="HeaderController" data-ng-include="'/modules/core/views/header.client.view.html'"></div>

<div id="page-content" class="clearfix" fit-height>
  <div id="wrap" data-ui-view="" class="mainview-animation"></div>
</div>