Angular ui - 多次执行标签控制器

Shl*_*omo 5 javascript tabs angularjs angular-ui angular-ui-router

当我单击选项卡时,相应的控制器将执行4次.为什么?

例如DetailsPersonController,它的init功能执行了4次.只有在选项卡视图加载后才能执行.

Html标签:

<tabset>
            <tab ng-repeat="tab in vm.tabs()"
                 heading="{{ tab.text | translate }}"
                 ui-sref="p.search.details.{{ tab.id }}"
                 active="tab.active">
               <div ui-view="tabContent"></div>
            </tab>
         </tabset>
Run Code Online (Sandbox Code Playgroud)

状态:

.state( "p.search.details", {
            url: "/details",
            abstract: true,
            templateUrl: "app/modules/partials/p/search/details/details.html",
            controller: "DetailsController",
            controllerAs: "vm"
         } )

         .state( "p.search.details.person", {
            url: "/person",
            views: {
               "tabContent": {
                  templateUrl: "app/modules/partials/p/search/details/person/person.html",
                  controller: "DetailsPersonController",
                  controllerAs: "vm"
               }
            }
         } )

         .state( "p.search.details.details", {
            url: "/details",
            views: {
               "tabContent": {
                  templateUrl: "app/modules/partials/p/search/details/details/details.html",
                  controller: "DetailsDetailsController",
                  controllerAs: "vm"
               }
            }
         } )

         .state( "p.search.details.driver", {
            url: "/driver",
            views: {
               "tabContent": {
                  templateUrl: "app/modules/partials/p/search/details/driver/driver.html",
                  controller: "DetailsDriverController",
                  controllerAs: "vm"
               }
            }
         } )

.state( "p.search.details.tests", {
            url: "/tests",
            views: {
               "tabContent": {
                  templateUrl: "app/modules/partials/p/search/details/tests/tests.html",
                  controller: "DetailsTestsController",
                  controllerAs: "vm"
               }
            }
         } )
Run Code Online (Sandbox Code Playgroud)

Pan*_*kar 7

你有ui-view错误的地方,这是要求使用标签vm.tabs().

由于ng-repeat渲染div 有4个标签,因为它已经放置在tab要重复使用的元素中ng-repeat.

ui-view指令在第4页上呈现时,检查浏览器网址并询问具有4个特定内容的具体内容tabs为什么所有带模板的控制器在您的应用内被调用了4次.

标记

    <tabset>
        <tab ng-repeat="tab in vm.tabs()"
             heading="{{ tab.text | translate }}"
             ui-sref="p.search.details.{{ tab.id }}"
             active="tab.active">
        </tab>
     </tabset>
     <div ui-view="tabContent"></div>
Run Code Online (Sandbox Code Playgroud)