使用我的工厂/服务时,我无法保持2个控制器同步。
我(稍微缩小)
angular.factory('API', ['$http', function($http){
let self = this;
self.scans = [];
self.updateHistory = function (cb) {
return $http.get('/scanner/history').then(function(scans){
self.scans = scans.data;
if (cb) {
return cb(self.scans);
} else {
return self.scans;
}
}, function(err){
console.error(err);
});
};
return self;
}]);
然后我的控制器
angular.controller('NewCrawl', ['$scope', 'API', function ($scope, API) {
$scope.scan = {
url: null
};
$scope.startScan = function () {
if ($scope.scan.url) {
API.start($scope.scan.url)
.then(function(){
API.updateHistory();
});
}
};
}])
和
angular.controller('ScanHistory', ['$scope', 'API', function($scope, API){
$scope.scans = API.scans;
API.updateHistory();
}])
然后我在我的ScanHistory控制器中有一个ngRepeat,如
<tbody>
<tr ng-repeat="scan in scans | orderBy:'id':true">
<td><% scan.id %></td>
<td><% scan.url %></td>
<td><% scan.started %></td>
<td><% finishedText(scan) %></td>
<td><% scan.errors.length %></td>
</tr>
</tbody>
所以这基本上就是设置,问题是 - 当我运行API.updateHistory()
时它会触发,如果我在服务中console.log(self.scans)'
,我会得到预期的结果。
但是,即使API.updateHistory
方法返回了正确的结果,我的ngRepeat也不会使用新添加的项进行更新。
为什么!?
答案 0 :(得分:0)
当您调用API.updateHistory()
函数时,NewCrawl
只会在$scope.startScan
控制器中触发。它不会影响其他控制器(ScanHistory
),因为即使您在那里注入API
服务它们也没有连接。如果要同步两个控制器,请使用$rootscope
。我想你可以在这篇文章How to call a function from another controller in angularjs?