我有一个项目,使用角的$超文本传输协议服务从远程位置加载数据。我想使用rxjs的可观察性,所以我的服务中的调用看起来像这样:
userInfo() : Rx.Observable<IUserInfo> {
var url : string = someUrl + this._accessToken;
return Rx.Observable.fromPromise<IUserInfo>( this.$http.get<IUserInfo>( url ) );
}
这是我的控制器订阅的,如下所示:
getUserInfo() : void {
this._googleService.userInfo().subscribe(
( result ) => { this.handleUserInfo( result ) },
( fault : string ) => this.handleError( fault )
)
}
private handleUserInfo( result : IHttpPromiseCallbackArg<IUserInfo> ) : void {
console.log( "User info received at " + new Date() );
this._name = result.data.given_name + " " + result.data.family_name;
this._email = result.data.email;
this._profilePicUrl = result.data.picture;
}
问题是,尽管名称、电子邮件和个人资料图片正在更新,但这些更改不可见。一旦其他任何东西触发角$应用,更改就会出现,但由于可观察到,控制器中的这些更改发生在由$超文本传输协议调用触发的角摘要循环之后。如果我的服务只是向控制器返回一个promise,这确实可以正常工作。
在这种情况下,如何更新视图?我不想手动连接每个可观察对象以触发摘要循环。我希望所有可观察对象在接收到新值或错误时触发摘要循环。
我拿不到处方。ScopeScheduler方法无法工作,因此我只是重写了rx observable subscribe方法本身,并将回调封装在$rootScope中$适用:)
module.run(['$rootScope', 'rx', function ($rootScope, rx) {
rx.Observable.prototype.subscribe = function (n, e, c) {
if(typeof n === 'object') {
return this._subscribe(n);
}
var onNext = function(){};
if(n) {
onNext = function(value) {
if($rootScope.$$phase) {
n(value);
}
else {
$rootScope.$apply(function(){ n(value); });
}
};
}
var onError = function(err) { throw err; };
if(e) {
onError = function(error) {
if($rootScope.$$phase) {
e(error);
}
else {
$rootScope.$apply(function(){ e(error); });
}
};
}
var onCompleted = function(){};
if(c) {
onCompleted = function() {
if($rootScope.$$phase) {
c();
}
else {
$rootScope.$apply(function(){ c(); });
}
};
}
return this._subscribe(
new rx.AnonymousObserver(onNext, onError, onCompleted)
);
};
}]);
我们可以使用rx的ScopeScheduler。有棱角的谢谢。我们只需创建一个新模块,在其中创建角度模块并将$rootScope传递给它:
const module : ng.IModule = angular.module( 'moduleName', [] );
module.run( ["$rootScope", ( $rootScope ) => {
new Rx.ScopeScheduler( $rootScope );
}]);
这就是你要做的。现在全部接收。可观测值在获得新值时触发$apply。
由于某种原因,在接收时ScopeScheduler被删除。有棱角的js库已升级到rxjs版本4。我们必须使用rx。有棱角的js版本0.0。14使用ScopeScheduler。
我不知道版本4中建议的解决方案是什么。
可以在此处查看使用此修复html" target="_blank">程序的项目:
https://github.com/Roaders/Typescript-OAuth-SPA/tree/observable_apply_issues
当我单击一个按钮(刷新页面中的数据,释放缓存)主页时,我想刷新页面我的主页中有一个列表。有一个功能可以更改列表上的项目。但当我更改项目并重定向到主页时,它会显示以前的值,直到刷新页面为止,我只想在按下按钮时刷新(清除主页上的缓存)。控制器处于$状态。go(“应用程序订阅”) 我写了这个。如何更改它?
问题内容: 我有一个具有单个 视图* 的 Eclipse插件 (例如eclipse helloworld-view-plugin- project)。在视图文件中 ,我想更新视图时 得到一个 事件 。 *** 在此视图中,我在一个具有多个标签的组中有一个GridData。我有几个 注册到程序的服务,其状态应 在此GridData中显示。 编辑:为了更好地显示我的问题,我更新了这篇文章,并添加了整个
我有一个部分视图,我正在发送两个参数,然后尝试使用$(“#div”).html(结果)刷新部分视图div。使用mvc操作将数据正确地发送到partial view,并且我在控制台中看到partial view正在通过ajax调用进行更新。所有工作都按预期进行,但mainview中的部分视图从未得到更新或刷新。所以我总是第一次看到SubscriptionID和EntityOrganizationID
似乎刷新问题之前讨论过,但没有一个解决方案对我有效。 我正在尝试做的事情:我正在使用FragmentStatePagerAdapter。适配器的每个位置都保存一个片段,该片段具有类似国际象棋的线性布局,每个单元格由CheckedTextView表示。 问题:即使正确存储和分配了值,视图仍然不能刷新,视图中单元格的值也不会得到更新。 我尝试过的建议都不起作用:1。调用Adapter.NotifyDa
问题内容: 我正在使用swift构建RSS阅读器,并且需要实现pull来重新加载功能。 这是我试图做到的方式。 我正进入(状态 : super.init调用未初始化属性“ self.refresh” 请帮助我了解手势识别器的行为。一个有效的示例代码将有很大的帮助。 谢谢。 问题答案: 拉动刷新 是iOS内置的。你可以像这样迅速 在某些时候,您可能会刷新。
问题内容: 我在这里阅读,但是如果xml文件更改,jtree不会重新加载/ refreshes 如何创建刷新/重新加载Jtree的函数, 我尝试编写代码: 但我收到错误:java.lang.NullPointerException 问题答案: 我添加了一个新的,以在。您可能需要从构造函数中重构出来;为了方便起见,我已经对其进行了硬编码: