在Angular.js中,使用UI路由时,可以使用'resolve”在状态(state)中预加载数据。但是,在子组件中使用'resolve”时,可能会遇到无法获取预加载数据的问题。
解决方法是在获取预加载数据的时候,将其赋值给子组件的控制器,并使用$watch检测这个值的变化。
以下是一个示例:
// 状态定义 $stateProvider.state('parent', { url: '/parent', templateUrl: 'parent.html', controller: 'ParentController', resolve: { testData: function(TestService) { return TestService.getData(); } } });
// 父控制器定义 app.controller('ParentController', function($scope, testData) { // 赋值给子控制器 $scope.testData = testData; });
// 子控制器定义 app.controller('ChildController', function($scope) { // 监听testData的变化 $scope.$watch('$parent.testData', function(newValue, oldValue) { if (newValue !== oldValue) { $scope.testData = newValue; } }); });
// 子控制器模板
{{testData}}
在此示例中,我们从TestService中获取预加载数据,然后将其赋值给父控制器中的$scope.testData。在子控制器中,我们使用$watch检测父控制器中$scope.testData的变化,并在变化时将其赋值给子控制器中的$scope.testData。
这样就可以在子控制器中使用预加载数据了。