gpt4 book ai didi

angularjs - UI-路由器 : Can I get always the same controller?

转载 作者:行者123 更新时间:2023-12-02 01:56:03 24 4
gpt4 key购买 nike

我正在使用 UI-Router 在我的应用程序中添加一些“菜​​单”。

$stateProvider.state("list"
url: "/Focales"
templateUrl: "/demo/focals.html"
controller: FocalCtrl)
$stateProvider.state("collection"
url: "/Collections"
templateUrl: "/demo/collections.html"
controller: CollectionCtrl)

在我的 CollectionCtrl 中,我触发了在服务器上完成的处理并等待显示这样的信息 (CoffeeScript)

Progress = $resource('/collections/getProgress')

$scope.getProgress = () ->
prg = Progress.get {}, ->
$scope.currentProgress = prg
$scope.getProgress() if prg.end isnt true

我的问题:当用户移动到 Focal 并返回到 CollectionCtrl 时,我有一个新的 CollectionCtrl 实例。据我所知,$scope.getProgress 代码仍然接收数据,但用于 PREVIOUS CollectionCtrl(因此显示未更新...)

是否可以获取以前的 Controller 而不是 CollectionCtrl 的新“实例”?为什么要创建一个新的 CollectionCtrl?什么是最好的方法:所以我很想有一个状态数据来存储当前的 $scope,这样我就可以做 $state.currentScope = prg 而不是 $scope.currentProgress = prg。这是一个好方法吗?

谢谢!

最佳答案

此处采用的最佳方法是定义一个 service它将与服务器通信并可能缓存结果。该服务可以注入(inject)到 Controller 中, Controller 可以向它询问进度,可能使用 $watch,尽管为服务提供回调也可能足够,并更新基于此的 UI。

Controller 应该是短暂的,并且不应该依赖它们作为 Angular 中的单例对象。重要的是,除了它们所支持的模板所需的状态之外,它们不应包含任何状态。当路由激活时,它们会再次创建,这样我们就可以编写相对简单的代码,初始化 $scope 一次,并确保它将包含新鲜信息(w.r.t路线)为模板尽可能。如果像 /app/:object_id 这样的每个路由都保留一个 Controller 并且用户经常切换路由,这也可以避免内存泄漏。

关于angularjs - UI-路由器 : Can I get always the same controller?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19893333/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com