3

我有一个问题,我找不到正确的答案。

好的,例如,我有从 api 收集的数据

行政

用户

用户资料

用户统计

为此我有

管理员Ctrl

用户控制

用户配置文件Ctrl

用户统计Ctrl

问题是当我在我的控制器中时,如果我想查看 userprofile 然后 userprofileCtrl 从 admins/:admin_id/users/:user_id/profile 之类的 url 获取路由,我必须收集所有数据,如管理员、用户和配置文件每个控制器都能够在我的视图中打印有关用户的所有详细信息。

我可以以某种方式嵌套控制器吗?这会导致控制器出现大量干燥现象。

还想知道打印错误消息的最佳做法是什么,我有 apiservice,它向我的 api 发出所有请求,我应该在服务中设置消息如何,rootScope?

4

4 回答 4

0

我认为您需要查看 angular-ui 的 ui-router 指令。

它专为嵌套路由而设计。

https://github.com/angular-ui/ui-router

http://angular-ui.github.io/ui-router/sample/#/

于 2013-04-26T08:49:51.030 回答
0

如前所述,您可以在应用程序中嵌套控制器 - 即;

<div ng-controller='outercontroller'>
     <div ng-controller='innercontroller'>
     </div>
</div>

内部控制器可以访问您在外部控制器范围内定义的任何内容 - 它会隐藏外部控制器的值。您还可以通过 $scope.$parent 从内部控制器的范围访问外部控制器中的值。这可能会有所帮助:AngularJS 中范围的继承

理想情况下,您应该使用服务来检索和存储数据。然后,您可以从服务中检索它。另一个优势是,您可以将服务设计为仅在服务发生任何更改时才刷新其数据,从而避免您进行可能的冗余调用。Socket.io 可能用于此目的,或者您可以定义一个计时器,使其仅在设定的时间后刷新。

至于错误信息;我可能会在必要的地方创建 try/catch(或您打算用于错误的任何逻辑)块并将错误代码传递给 errorMessageService。在我看来,我会将错误参数绑定到服务上。如果服务中存在错误,它将在视图中显示错误。

于 2013-05-17T11:17:47.200 回答
0

1

在我看来,控制器应该只用于启动范围状态,数据加载任务应该移至angular.factoryangular.service取决于您的需要。好处是:

  1. 服务对象存在于应用程序生命周期中。您将一直处理同一个对象,这样即使您路由到另一个 url 或控制器,您也可以保留数据。
  2. 您的数据将在任何地方可用
  3. 您不必担心弄乱范围继承。

在某些情况下你想ng-repeat在你的 html 中使用,你可以这样做:

app.run(function($rootScope) {
    $rootScope.yourDataService = yourDataService
}

所以你ng-repeat会变成:

<li ng-repeat="item in yourDataService.items"></li>

2

您可以在服务对象中访问 $rootScope ,但是如果您按照我的第一个答案进行操作,则不必担心。您可以将错误消息附加到您的服务对象中,app.service然后它将作为$rootScope.yourDataService.errorMessage.

于 2013-08-14T14:13:46.933 回答
0

您可以在视图中嵌套控制器,因此每个子控制器都会继承父控制器的模型。

查看“控制器继承示例”中的角度文档:http: //docs.angularjs.org/guide/dev_guide.mvc.understanding_controller

控制器:

angular.module('App', [])
.controller('MainCtrl', ['$scope', function($scope){
    $scope.foo = 'foo';
}])
.controller('CtrlOne', ['$scope', function($scope){

}])
.controller('CtrlTwo', ['$scope', function($scope){
    $scope.foo = 'bar';
}]);

然后您的视图将如下所示:

<div ng-app='App'>
    <div ng-controller='MainCtrl'>
        <div ng-controller='CtrlOne'>
            CtrlOne: {{foo}}
        </div>
        <div ng-controller='CtrlTwo'>
            CtrlTwo: {{foo}}
        </div>
    </div>
</div>

jsFiddle 上面的例子:http: //jsfiddle.net/guilhermenagatomo/pAHR8/

更复杂的方法是使用服务在控制器之间共享数据。

于 2013-05-08T05:12:49.837 回答