我在ng-init中调用一个函数并将值存储在数组中以便在ng-repeat中使用。如何在同一控制器和不同控制器中的某些状态下使用该数组。
我找到了
app.run(['$rootScope', '$state', '$stateParams', function ($rootScope, $state, $stateParams)
{
$rootScope.$state = $state;
$rootScope.$stateParams = $stateParams;
}
]);
但它不起作用
如果我使用$ rootScope.arr = [];比各州都有,但没有美元范围。
答案 0 :(得分:0)
您应该在路由器中使用params。这允许您在两个(或更多)状态之间传递信息。例如,假设使用UI-Router,您可以设置这样的状态来传递url字符串中的参数:
state('state-one', {
url: '/new?itemId',
templateUrl: 'index-one.html'
})
您可以通过将此变量添加到状态(或者具有完全独立的控制器文件)来访问控制器中的变量:
controller: function($scope, $stateParams) {
$scope.itemId = $stateParams.itemId;
}
在两个状态之间导航并在模板中传递该信息:
<a ui-sref="state-one({ itemId: 1 })">State One</a>
同样,您也可以设置状态以使参数可用,并传递信息:
state('state-two', {
url: '/two',
templateUrl: 'index-two.html',
params: {
itemId: null,
itemObject: null
}
})
在不使用模板链接的情况下在状态之间移动:
$state.go('state-two', { itemId: vm.someId, itemObject: { some: object } });
在你的情况下,这将有效:
state('state-three', {
url: '/three',
templateUrl: 'index-three.html',
params: {
array: null
},
controllerAs: 'vm'
})
在状态二的控制器(例如)中移动到状态-3并保留数组以供状态三使用:
$state.go('state-three', { array: $scope.myArray })
这假设$ scope.myArray已分配给状态二控制器中的数组。你使用'array'作为参数中的值,所以当你在状态三的控制器中再次访问它时,你将在$ stateParams.array上做你的逻辑 - 将它分配给那个控制器(状态 - 三个人可以使用,如:
$scope.myArray = $stateParams.array;
如果你在ng-repeat中使用它('vm'是控制器的$ scope):
<div ng-repeat="item in vm.myArray">
答案 1 :(得分:0)
在app.js中定义你的html模板状态,如下所示:
.state('booklist',{
url:'/booklist/:array', //eg- I am passing id and title
views:{
'menuContent':{
templateUrl:'templates/booklist.html',
controller:'BooklistCtrl'
}
}
})
在你的html模板中
<div class="list" ng-repeat="item in array">
<p>{{item.title}}</p>
<p>{{item.id}}</p>
<button ng-click = pass(array)>Click Me</button>
</div>
在你的控制器中,
$scope.pass = function(data){
$state.go('booklist',{array:name});
}
在你的控制器中,两个,
$scope.arr = $stateParams.array;
更新
编写一个函数来存储数组中的值
//example
controller('ExampleCtrl',function($scope){
function loadData(){
//you get your data here..after this
$scope.data = [];
for(var i =0 ; i<5; i++){
$scope.data.push({}); //data stored in your array
}
};
loadData(); //call the above function, no need to use ng-init
//pass $scope.data array in to another controller
})