当前位置: 首页 > 知识库问答 >
问题:

使用路由器出口时,可观察到页面刷新后未更新值

漆雕育
2023-03-14

我使用的是带有一个简单的路由器插座元件的Angular2 RC5和Angular2/router。我有一个可观察的,在视图中运行良好,但当你刷新页面时(F5或CTRL-F5),它就不起作用了。我在Chrome(最新版本)和IE11(可能还有其他浏览器)中都有这个功能。目前我有一个变通方法,但我不明白为什么我的更改没有自动反映在视图中。

该项目相当大,因此请尽量减少:

在MyService.ts

@Injectable()
export class MyService {
    initialValue: MyObject = new MyObject(); // actually I read this from local storage...

    _information: BehaviorSubject<MyObject> = new BehaviorSubject(this.initialValue);
    get obsMyObj(): Observable<MyObject> {
        return this._information.asObservable();
    }

    myServiceFunction() {
         return this.http.get(`api/myUrl`)
            .map(this.extractMyInfo);
    }

    extractMyInfo = (res: Response): MyObject {
        let body = res.json();
        var myObject = new MyObject().mapAllProperties(body);
        this._information.next(myObject);
        return myObject;
    }
}

在MyComponent.ts:

@Component({
    selector: '[header]',
    templateUrl: 'app.component.header.html'
})

export class HeaderComponent implements OnInit {
    constructor(private myService: MyService) { }
    myObject: MyObject = new MyObject();

    ngOnInit() {
            this.myService.obsMyObj.subscribe(
                (data) => {
                    this.myObject = data;
                    });
    }
}

在MyView.html

<div>
    <img [src]="myObject?.picture"> <!-- this always works, I see the picture after page refresh -->
    <p>{{myObject?.prop1 }}</p> <!-- this does not work after page refresh -->
</div>

另一个组件对myServiceFunction进行实际的服务调用,这就是为什么我创建了一个可观察的对象来在MyComponent.ts中显示它。

而不是使用此。myObject=数据并手动分配属性,它适用于每次页面刷新。。。

this.myObject.prop1 = data.prop1;
this.myObject.prop2 = data.prop1;

调试时,使用初始状态和页面刷新的正确数据调用订阅方法。

我尝试直接绑定observable,而不是在组件中使用对象。

我尝试使用异步管道。

共有1个答案

韩瀚
2023-03-14

可能您的问题来自您的MyComponent的ngOnInit。你能试着订阅这个吗。我的服务。obsMyObj()而不是此。我的服务。obsMyObj?

ngOnInit() {
  this.myService.obsMyObj().subscribe(
    (data) => {
      this.myObject = data;
    });
}
 类似资料:
  • 在我的应用程序中,用户登录后我有一个主页和一些其他页面。问题是,当我在其中一个页面中刷新页面时,它会再次将我发送到主页。这是我的路线: 应用程序组件具有路由器出口 那么,我期待什么呢?首先,如果我是我的“列表”页面()并且我刷新了这个页面,它应该留在那里。在那一页。但现在它将我重定向到本地主机:4200/home。当然,当我单击一个列表项时,它应该将我发送到本地主机:4200/detail/ite

  • 问题内容: 发生更改时,如何检测对数据库的最新更新并以静默方式刷新页面? 假设数据库访问如下所示: 任何想法和样品将不胜感激。谢谢。 问题答案: 这就是我最近使用jQuery实现解决方案的方式。 每当发生 重大 更新时,PHP都会在数据库中增加一个字段。 最初加载页面时,使用数据库中的数字填充JavaScript变量:

  • 问题内容: 我有一个正在使用的应用程序,每当刷新页面时都会遇到问题。我正在使用嵌套视图(命名视图)来构建应用程序。每当我刷新页面时,都不会重新加载当前状态,只会使页面空白。 页面加载等于 我正在通过文件并通过状态循环从文件中读取导航。这就是我可以显示的内容: 对于嵌套json对象中的每个项目,将执行此代码。如果还有其他有用的方法,请告诉我。 问题答案: 有一个问题:AngularJS-UI-rou

  • 问题内容: 如何定期使用PHP刷新页面?如果我用PHP无法做到这一点,那么最好的推荐方案是什么? 问题答案: 您可以使用PHP来做到这一点: 它会刷新您的当前页面,如果需要将其重定向到另一个页面,请使用以下命令:

  • 我已经实现了一个angular应用程序,它请求一个项目列表来填充一个表格。在我的服务中,我有以下函数,它从服务器请求项目列表: 编辑:表获取数据的方式: 在HTML中,我将数据源绑定到mat表

  • 本文向大家介绍vue使用watch 观察路由变化,重新获取内容,包括了vue使用watch 观察路由变化,重新获取内容的使用技巧和注意事项,需要的朋友参考一下 问题背景: 点击用户头像 => 进入用户个人中心,在用户个人中心里点击其他用户的头像,我希望显示被点击用户的个人中心,但只看到了路由参数在发生变化,页面内容并没有更新。如图: 页面代码如下: 解决办法: 使用 watch,观察路由,一旦发生