angularjs – RxJS并与Angular 1一起使用
|
我正在研究Angular 1.5应用程序与RxJS之间的集成.我正在考虑直接使用RxJs,但后来发现了以下内容,虽然它已经过几个月没有更新了.
https://github.com/Reactive-Extensions/rx.angular.js 推荐哪种方式?订阅时还应该在哪里进行?在控制器?还是在服务方面? 有没有人有更多的信息?我真的想将我的Angular应用程序与RxJs集成,但我发现很难找到具体的文档或指南. 解决方法
我整理了一个小型的JSFiddle来演示
RxJS-Angular Extensions Project的修改示例.编辑我的第一个例子非常类似于点击事件资源中的例子.我让这个例子变得更复杂,并且使用Subject发布和订阅由返回promise的工厂处理/修改的数据的示例.
版本说明:Rx-Angular,截至09.28.2017,仅支持RxJS版本4. RxJS是对RxAngular的依赖,因此要小心,否则您将遇到无法解决的错误. 简而言之,我的答案是使用Rx-Angular扩展库.部分原因是因为RxJS是Angular-RX的依赖项,所以无论如何你都可以使用它并且可以同时使用它们.但也因为它允许一些简单的Observable制作,这对于事件或“$watches”非常有用. https://jsfiddle.net/ejmLpyrn/3/ HTML <div ng-app="myApp" ng-controller="appCtrl">
<!-- RxJS v4.1.0,RxAngular v1.5-->
<div class="jumbotron">
<div class="form-group">
<input type="text" ng-model="query" />
<button type="button" ng-click="clickFunction()">
Search
</button>
</div>
</div>
<hr>
<div>{{message}}</div>
</div>
JS angular.module('myApp',['rx'])
.factory('subjectProxyService',function () {
var subjectProxyService = {};
var subject = new Rx.Subject();
subjectProxyService.subject = function () {
return subject;
}
return subjectProxyService;
})
.factory('appFactory',function(rx) {
function addContextToMessage(query) {
var deferred = $.Deferred();
var timestamp = moment().format("YYYY-MM-DD");
var _msg = "[" + timestamp + "]" + query;
deferred.resolve(_msg);
return rx.Observable
.fromPromise(deferred.promise())
.map(function(contextMsg) {
return contextMsg;
});
}
return {
addContextToMessage: addContextToMessage
};
})
.controller('appCtrl',function($scope,rx,appFactory,subjectProxyService) {
$scope.query = "";
$scope.message = "";
subjectProxyService.subject().subscribe(
function (x) { console.log('Value published to observer: ' + x); },function (e) { console.log('onError: ' + e.message); },function () { console.log('onCompleted');
});
$scope.$createObservableFunction('clickFunction')
.map(function () {
return $scope.query;
})
.flatMapLatest(appFactory.addContextToMessage)
.map(function(results) {
return results;
})
.subscribe(subjectProxyService.subject());
// give the service-subject as the subscriber to the "click stream"
})
你可以肯定在Angular中做纯RxJS,但如果你真的想要,你也可以在你的Angular应用程序中编写jQuery.只要加载了所有库,您就只需在Angular中运行JavaScript.我认为它主要是最佳实践,也是未来智能使用Angular扩展,但您也可以期望支持Angular和RxJS更改.更不用说,他们花时间编写了一堆经过测试的帮助器和构造函数方法,您不必自己编写 – 比如将$scope变量上的$watch映射/链接到Observable. 资源 这里是Rx-Angular的更多资源.例如,您可以使用3种有用的方法在Angular中创建Observable.它们基本上是RX Observables的有用构造方法(所以你不必编写自己的!): > $toObservable (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- angular2 post以“application/x-www-form-urlencoded”形式
- vim通过快捷方式直接传递到pathfile,总是
- scala引发了如何获得最新一天的记录
- angularjs – 如何以编程方式更改ui-view模板URL
- twitter-bootstrap – 如何正确覆盖box-shadow bootstrap m
- 如何用更大的元组编译scala?
- angular – 使用IntervalObservable时“takeWhile不是函数”
- scala – java.lang.ClassNotFoundException:org.apache.s
- 用Axis开发Webservice
- 《数据结构》实验三: 栈和队列实验
