Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 更新多个视图_Javascript_Angularjs - Fatal编程技术网

Javascript 更新多个视图

Javascript 更新多个视图,javascript,angularjs,Javascript,Angularjs,我正在尝试更新多个组件的视图。因此,我使用广播。如果我使用的代码中没有$apply(),则视图不会更新。如果在多个视图上使用apply,则会出现“[$rootScope:inprog]$apply已在进行中”错误 更改代码 service.prototype.setNewTopic = function (topic) { var self = this; var promise = $http( { method: 'POST', url

我正在尝试更新多个组件的视图。因此,我使用广播。如果我使用的代码中没有$apply(),则视图不会更新。如果在多个视图上使用apply,则会出现“[$rootScope:inprog]$apply已在进行中”错误

更改代码

service.prototype.setNewTopic = function (topic) {
    var self = this;
    var promise = $http(
    {
        method: 'POST',
        url: self.baseUrl + 'Admin/setNewTopic',
        contentType: 'application/json',
        data: {
            topicName: topic
        }
    });

    return promise;
}

我改变了$on方法的行为,它应该从$broadcast接收数据,我想应该在组件中适当地设置它

//控制器-我假设控制器中的$scope属性名为$scope.newTopic

 service.setNewTopic($scope.newTopic).then( function(data) {
      $rootScope.$emit('testMonitor',$scope.newTopic)
   })
//每个侦听组件都有一个

$rootScope.$on('testMonitor', function(data) {
  $scope.newTopic = data;
});
我将服务更改为仅执行http工作 //服务

service.prototype.setNewTopic = function (topic) {

    return $http(
    {
        method: 'POST',
        url: self.baseUrl + 'Admin/setNewTopic',
        contentType: 'application/json',
        data: {
            topicName: topic
        }
    });

}

目前还不清楚您试图从这个片段中实现什么,但看起来您正在尝试广播,并让每个组件都获得数据以响应广播。这似乎效率低下,但数据肯定应该在不使用
$scope.$apply()
的情况下更新。这感觉像是一场灾难。您应该首先询问为什么数据没有更新,而不是为什么
$scope.$apply()
不起作用。换句话说,在一个视图中显示您的组件和它的视图。谢谢。如果这是低效的,你能告诉我一个更有效的方法吗?不,我也在我的服务上面加了一个例子。我正在尝试在添加新主题后广播和更新视图。好的,如果我在这里出错,请更正我?您有多个使用同一服务的控制器,并且希望通过此同一服务更改其视图(模型)。是吗?非常感谢。这就是我需要的。即使在我实际设置主题的控制器中,我也应该以同样的方式使用它吗。或者我需要为此创建一个单独的HTTP。或者我应该回报承诺,然后广播。我想管制员应该给你的服务打电话。setNewTopic(主题)。我个人认为控制器应该处理广播,service.setNewTopic().then(函数(数据){$rootScope.$emit('testmonitor',data)})。这意味着服务应该只执行http调用,仅。。。我还将它从$rootScope.$broadcast('testMonitor')更改为$rootScope.$emit('testMonitor'),因为这是一个花费较低的makeThank电话。我以为在我广播的数据中是json对象,但我有“成功”。我试图像这样解析它:self.newTopic=$.parseJSON(data)。我得到了一个错误,json是不正确的。我可以在视图中设置数据吗?如何在控制器中设置更改代码中的数据?我理解,这意味着您的POST调用不会返回数据,而是返回成功/失败,这意味着您应该广播您的newTopic,即$scope.newTopic。。。你的意思是说你发邮件也有问题吗?更新答案谢谢你的帮助。我决定将设置主题与获取相结合,但我得到了404错误。你知道为什么吗。我更改了上面的代码