【发布时间】:2015-08-15 12:19:40
【问题描述】:
我有一个具有三个视图的 Angular 应用程序。当它加载时,它会运行一些代码来填充 $scope 变量。当我更改视图然后返回控制器时,我希望初始代码再次运行,但它没有。它似乎已被缓存,并且 $scope 变量没有根据发生的情况进行更新。
如何在每次加载视图时强制控制器运行初始化代码?
我的路线:
app.config(function ($routeProvider) {
$routeProvider
.when('/', {
controller: 'HomeController',
templateUrl: 'home.html'
})
.when('/teach', {
controller: 'TeachController',
templateUrl: 'teach.html'
})
.otherwise({
redirectTo: '/'
});
});
每次点击'/'路由时我想运行的代码:
getSubPools.success(function(data) {
$scope.userPools = data;
});
完整的控制器:
app.controller('HomeController', ['$scope', '$filter', 'stream', 'removeDroplet', 'qrecords', 'helps', 'get_user', 'updateRecords', 'getSubPools', function($scope, $filter, stream, removeDroplet, qrecords, helps, get_user, updateRecords, getSubPools) {
get_user.success(function(data) { //get current user
$scope.user = data;
});
getSubPools.success(function(data) {
$scope.userPools = data;
});
stream.success(function(data) {
$scope.stream = data;
if ($scope.stream.length === 0) { //determine if user has stream
$scope.noStream = true;
} else {
$scope.noStream = false;
}
$scope.getNumberReady(); //determine if any droplets are ready
if ($scope.numberReady === 0){
$scope.noneReady = true;
} else {
$scope.noneReady = false;
$scope.stream = $filter('orderBy')($scope.stream, 'next_ready'); //orders droplets by next ready
}
});
$scope.showEditStream = true;
$scope.showStream = false;
$scope.rightAnswer = false;
$scope.wrongAnswer = true;
$scope.noneReady = false;
$scope.subbedDroplets = [];
$scope.focusInput = false;
}]);
【问题讨论】:
-
路由改变时,每次都会初始化关联控制器。你能把 HomeController 的代码给我看一下吗,我可以帮你解决这个问题,
-
我已经添加了 Mohan 的信息。
-
重要的部分是:如果您已经在“/”这个 url 上并且您正试图点击“/”相同的路线。在这种情况下,控制器不会被初始化。为了实现这一点,编写一些函数并广播一个事件。并在 HomeController 中监听该事件。如果我在同一页面上,请告诉我这样我可以为你写 plunker 或 jsfiddle
-
其实这不是问题。问题是当我从 '/' 转到 '/discover' 并做一些事情时,数据没有得到更新。
-
您的意思是要在发现视图中更新 $scope.somevariable 并期望在主页视图中更新它。 ?
标签: javascript angularjs