有没有办法以编程方式重新加载角度控制器

时间:2017-05-01 12:51:01

标签: javascript angularjs

在我的HTML页面中,有三个选项卡,每个选项卡都绑定了唯一的控制器,如下所示:

MainHTML(app.pages.managing.html):

<div id="DetailsViewContainer">
    <div ng-if="selectedTab === 'tab1'">
        <div ng-include="getTabUrl('tab1')" ng-controller="DetailsController"></div>
    </div>
</div>
<div id="CoursesViewContainer">
    <div ng-if="selectedTab === 'tab2'">
        <div ng-include="getTabUrl('tab2')" ng-controller="CoursesController"></div>
    </div>
</div>
<div id="UsersViewContainer">
    <div ng-if="selectedTab === 'tab3'">
        <div ng-include="getTabUrl('tab3')" ng-controller="UsersController"></div>
    </div>
</div>

主html已与父控制器绑定,如下所示:

'use strict';
 angular.module('app.pages.manage').config([
    '$routeProvider',
     function($routeProvider, appSettingsProvider) {
         $routeProvider
         .when('/:lang?/group/landing/v2/manage/',
              {
                   templateUrl: '/js/app/pages/manage/views/app.pages.managing.html',
                   controller: 'mainController'
              });
         }
 ]);

我的要求是在点击事件上,我想初始化与所选标签对应的绑定控制器。对于HTML文件中的三个绑定控制器,我没有单独的url配置,因此我无法使用$ location服务。我在UI路由器中探索了$ state,因为我不想初始化可能有用的父控制器(在为三个控制器定义三个不同的路由之后)。但是我使用的是ng-route模块,所以它不适合我。

那么有什么方法可以让我的控制器在切换标签时以编程方式重新加载(没有网址)? 我也想通过路由而不是ng-controller来绑定这个控制器,但是我还想防止重新加载父控制器(mainController)的状态,然后只重新加载我无法找到解决方案的选定控制器-route。

2 个答案:

答案 0 :(得分:1)

这可能会有所帮助。这是一个在angularJS中动态加载控制器的教程

https://weblogs.asp.net/dwahlin/dynamically-loading-controllers-and-views-with-angularjs-and-requirejs

答案 1 :(得分:0)

Nehal,你应该考虑花一些时间来处理UI路由器。你想要的东西可以在UI路由器中使用嵌套/子状态优雅地处理,它是为这种东西制作的。