我尝试的是获取不同状态的子视图
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
}
}
}
});
}
<div ui-view="allcompanies">
<h2>Home template</h2>
</div>
<div ui-view="single-company">
<div ng-init="someFunc()">
<h2>Companies List</h2>
</div>
</div>
<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函数调用问题所以如何管理子状态而不再一次调用该函数
提前致谢
答案 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指令并将函数放在此处,这将解决您的问题,并且根据角度文档更好地练习。
希望有所帮助。