当另一个模板绑定为子视图时,ui-view多次调用

时间:2017-03-09 05:52:45

标签: angularjs angular-ui-router

我尝试的是获取不同状态的子视图

我的州代码

 routeConfig.$inject = ['$stateProvider'];

  function routeConfig($stateProvider) {
    $stateProvider.state('home', {
        url: '/',
        templateUrl: 'home.html'          
      }).state('home.companies.products',{
        abstract: true,
        url: 'companies',
        views: {
          'allcompanies@home': {
            templateUrl: 'companiesList.html',
            controller: 'CompanyController',
            controllerAs: 'vm'
          }
        }
      }).state('home.companies.products.detail', {
      url: '/:companyId',
      views: {
        'single-company': {
          templateUrl: 'single-company.html',
          controller: 'SingleCompanyController',
          controllerAs: 'vm',
          resolve: {
            companyResolve: getCompany
          }
        }
      }
    });
}

home.html的

<div ui-view="allcompanies">
<h2>Home template</h2>
</div>

companiesList.html

<div ui-view="single-company">
<div ng-init="someFunc()">
<h2>Companies List</h2>
</div>
</div>

单company.html

<div>
<h2> single company </h2>
</div>

我的问题是当我打电话给&#34; home.companies.products.detail&#34;状态它将绑定在ui-view =&#34;单一公司&#34; &#34;单一公司&#34;模板而不是公司列表对&#34;公司列表&#34;具有约束力init函数在后台调用我不需要调用该函数的函数bcz,如果我再次去&#34; allcompanies&#34;再次查看该函数是第三次调用所以iam一次又一次地调用init函数调用问题所以如何管理子状态而不再一次调用该函数

提前致谢

2 个答案:

答案 0 :(得分:0)

不要使用ng-init。根据angularjs文档:

  

ngInit只有少数适​​当的用法,例如用于别名ngRepeat的特殊属性,如下面的演示所示;并通过服务器端脚本注入数据。除了这几种情况,您应该使用控制器而不是ngInit来初始化作用域上的值。   https://docs.angularjs.org/api/ng/directive/ngInit

如果在开头加载公司列表时只执行一次ng-init="someFunc()"的目的,则调用CompanyController中的函数。它将在第一次创建控制器时执行。

答案 1 :(得分:0)

只要您将控制器包装在如下的匿名函数中:

(function() {
angular.module('example', []){
someFunc(); //Function call

//Add function declaration here

});

然后在创建控制器时执行该功能。如果删除ng-init指令并将函数放在此处,这将解决您的问题,并且根据角度文档更好地练习。

希望有所帮助。