2014-10-29 55 views
0

我有一个user.list.ctrl和一个user.detail.cntr。所有的控制器都是作为一个模块构建的,并且注入到我在app.js中注入的“用户模块”中。 (见的完整代码在下面的plunker)角度如何使用示波器从不同的控制器

我的控制器模块

angular.module('user-module', ['user-module.controllers']); 

我的用户模块

angular.module('demo.app', ['user-module']); 

在两个控制器我注入用户FCTR与来自REST工厂数据。 (效果很好)

user.list.cntrl有$ scope.refresh() user.detail.cntrl有$ scope.update()

user.list.cntrl

    1. 当我输入一条新记录时,我调用$ scope.refresh(),以便刷新列表。 (这是工作的罚款)

user.detail.cntrl

    1. 当我从单击列表中的用户,在不同的视图中用户详细信息负载(工作正常)
  • 当我更新user.detail,我想呼叫$ scope.refresh()来更新user.list,但它不工作。我不能叫$ scope.refresh()

我想,既然我注入相同的工厂到两个控制器我可以使用对方的$范围。

如何,我可以用$ scope.refresh()(或更新的列表,当我更新user.detail.js)

我做一个plunker所有的js文件的任何提案(plunker不功能,它只是表明我的代码) http://plnkr.co/edit/HtnZiMag0VYCo27F5xqb?p=preview

感谢名单采取看看这个

回答

0

我落得这样做的:

我在list.contrl添加了这个:

factoryId.listScope = $scope; 

,因为我已经有factoryId在细节控制器注入(我的数据服务),我可以打电话这个:

factoryId.listScope.refresh(); 

它的工作原理,但我不知道这是否是最好的方法。任何意见?

1

这是一个非常概念性的问题。

您已经为每个“视图”创建了一个控制器,因为它们适用于不同的活动。这是控制器的目的。这是对的。

但是,您正尝试在另一个控制器中访问用一个控制器写入的刷新功能。从字面上看,这是错误的,从那时起,刷新不在用户列表控制器或细节控制器内。

一个函数旨在控制(字面上)在特定视图上发生的事情是一个控制器。 - 你有权利拥有一个控制器列表和一个细节。

要在控制器之间共享的函数必须是服务。这正是你想要的刷新功能。

无论何时将相同的工厂注入到n个控制器中,都无法使用每个控制器的范围。这不是控制器的目的。

但是,无论何时将相同的工厂注入到n个控制器中,都可以使用其公开的方法。

你有问题,可以如下解决:

app.factory('sharedFunctions', [ 'factoryId', function sharedFunctions(factoryId) { 
    var refresh = function() { 
    factoryId.getAll(/*your params to query*/) 
    .success(function (response) { 
     //This will return the list of all your records 
     return response; 
    }); 
    }; 
    return sharedFunctions; 
}]); 

,注册这家工厂服务,那么你可以把它注入到你的控制器,每当你需要刷新,只需调用的暴露的方法服务并将新信息绘制到视图中。

希望它适合你!

+0

我明白你的意思了。我很有道理。我会尽力回复。谢谢 – user2062455 2014-10-29 21:33:31

+0

我试过了,我该如何调用服务的“暴露方法”?请你澄清一下。 thanx再次 – user2062455 2014-10-30 00:33:15