【发布时间】:2015-09-18 15:06:48
【问题描述】:
我有一个实现向导的简单多视图 Angular 应用程序,因此每次用户单击“下一步”按钮时,应用程序都会导航到下一个视图,“返回”按钮也是如此。我有一个$routeProvider 配置,它将所有视图绑定到同一个控制器。每个视图代表一个带有输入字段的巨大表单块,$routeProvider 管理它们之间的导航:
app.config(['$routeProvider', '$locationProvider', function ($routeProvider, $locationProvider) {
$routeProvider.when('/salespoints', {
templateUrl: 'salespoints',
controller: 'main'
})
.when('/users', {
templateUrl: 'users',
controller: 'main'
})
.otherwise({
templateUrl: 'partner',
controller: 'main'
});
$locationProvider.hashPrefix('');
}]);
问题在于,每次用户单击“下一步”或“返回”时,都会调用控制器,因此在前面的步骤中所做的所有 $scope 更改都会丢失:
app.controller('main', ['$scope', function ($scope) {
console.log('controller invoked'); // appears each time a user presses "Next" or "Back", hence re-instantiation of $scope
}]);
应用程序足够小,可以转向$rootScope,以防其他所有方法都失败,但我只是想避免将其作为反模式。
让$scope 保持最新状态的最佳方法是什么,所有更改从应用实例的生命周期一开始就进行,并且在每次视图更改时不重新实例化它?
【问题讨论】:
-
如果你不想容器级别,你应该使用服务
标签: javascript angularjs angularjs-scope angularjs-routing angularjs-view