现在我正在使用服务将数据从视图传递到其他视图(不同的控制器也是如此),在视图 A 中,我有控制器 CtrA,我用来传递数据的服务是:
.factory(
'editreportservices',
[
'$q',
'sessionId',
function($q, sessionId) {
var sharedata = {};
var org={};
function passed(data){
sharedata = data;
};
function getsharedata(){
return sharedata;
};
function passedorg(data) {
org=data;
}
function getorg() {
return org;
}
return{
passed:passed,
getsharedata:getsharedata,
passedorg:passedorg,
getorg:getorg
}
}]);
Run Code Online (Sandbox Code Playgroud)
在 CtrA 中,如果我按下按钮,我将为 editreportservices.passed(report) 设置值,例如:
$scope.goeditpage = function(report){if(report){
editreportservices.passed(report);
}
else{
report={}
editreportservices.passed(report);
};
$state.go('editreport');
}
Run Code Online (Sandbox Code Playgroud)
并且它也将更改为视图 B,并且在 VIew BI 中可以使用 $scope.lin = editreportservices.getsharedata() 访问数据,它按预期工作。但是有一个问题,我不确定它是否是一个错误,如果用户刷新页面,从 viewA 传递的数据将消失。这可能是一个糟糕的用户体验,无论如何II可以在从VIewA传递之后将数据保留在viewB中吗?
我有一个用于生成令牌的自定义服务,在这个服务中我需要使用MD5功能,MD5功能在模块中 angular-md5
这是我的服务代码,角度模块generate_token使用的函数md5.createhash()但是我得到了错误:TypeError: Cannot read property 'createHash' of undefined
我想我做错了但我看不清楚
angular.module('app.services', ['angular-md5'])
.service('Auth', [function($scope, md5){
var self = this;
this.rand_alphanumeric = function() {
var subsets = [];
subsets[0] = [48, 57]; // ascii digits
subsets[1] = [65, 90]; // ascii uppercase English letters
subsets[2] = [97, 122]; // ascii lowercase English letters
// random choice between lowercase, uppercase, and digits
s = Math.floor(Math.random() * 2) + 0
ascii_code = Math.floor(Math.random() * (subsets[s][1] - subsets[s][0] + …Run Code Online (Sandbox Code Playgroud) 自从挖掘角度依赖注入(DI)的前几个基本级别,并且击中了用于Root()的gem之后,我一直想知道实际使用它的最佳实践是什么.
我偶然发现了这种方法,同时寻找一种允许延迟加载模块访问根上下文中的服务的方法,允许在两个模块之间共享数据流,其中一个或两个模块可能是延迟加载的.从那以后我想知道,你可以为共享模块中的所有内容使用forRoot()并在整个应用程序中保存大量的import语句吗?捕获量是多少?是否存在某些易于用于root的东西,以及其他不容易使用的东西?或者是root用于主要用于桥接延迟加载模块时桥接上述DI上下文问题?
我希望能够使用.subscribe访问我方法之外的数据
这是我的"工作"很好的服务
getSessionTracker(): Observable<ISessionTracker[]> {
return this.http.get(this._url)
.map((res: Response) => {
let data = res.json();
return data;
})
.catch(this.handleError)
}
Run Code Online (Sandbox Code Playgroud)
组件是我的麻烦所在
sessionTrackers: ISessionTracker[] = []; // object array
this.trackerService.getSessionTracker()
.subscribe((sessionTrackers: ISessionTracker[]) => {
this.sessionTrackers = sessionTrackers;
console.log('real data in subscribe', this.sessionTrackers[0].SessionId);
},
(err: any) => console.log(err),
() => console.log('getSessionTracker()'));
Run Code Online (Sandbox Code Playgroud)
//在功能之外这不起作用
console.log('real data', this.sessionTrackers);
Run Code Online (Sandbox Code Playgroud)
2个问题
this.sessionTrackers[0].SessionId 它是未定义的,但是this.this.sessionTrackers我该如何保存数据?
这是非常神秘的,我的订阅被多次触发 - 我不知道我的错误是什么 - 我在另一个人身上遵循了相同的方法,但它没有被多次触发
@Injectable({
providedIn: 'root'
})
export class CommonService {
constructor() {
this.getpatientId = this.bindPatientId.asObservable();
}
bindPatientId: Subject<number> = new Subject<number>();
getpatientId: Observable<number>;
setPatientId(patientId: number) {
this.bindPatientId.next(patientId);
}
bindTabId: Subject<number> = new Subject<number>();
}
Run Code Online (Sandbox Code Playgroud)
设置新值Subject
toggleProfile(patientId: number) {
this.commonService.setPatientId(patientId);
this.route.navigate(['/endrolPatient']);
}
Run Code Online (Sandbox Code Playgroud)
从另一个组件监听
ngOnInit() {
this._common.getpatientId.subscribe(
(res) => {
this.patientID = res;
console.log("console inside observable", this.patientID);
});
}
Run Code Online (Sandbox Code Playgroud)
在我的控制台中,当我通过时123- 我得到了console inside observable 123,但在第一个观察者休息后,所有订阅都加倍并在我的控制台中记录了两次 - 请帮助我修复它
我在这里阅读的所有内容: https: //angular.io/guide/dependency-injection-in-action使得这看起来应该是可能的,但是当尝试从另一个注入的服务上调用方法时,我收到此错误服务:
TypeError:无法在 CatchSubscriber.handleError [作为选择器] (project.service.ts:30) 处读取未定义的属性“isLoggedIn”,位于 TapSubscriber._error (tap.js:56) 处的 CatchSubscriber.error (catchError.js:29) 处TapSubscriber.error (Subscriber.js:55) 在 MapSubscriber._error (Subscriber.js:75) 在 MapSubscriber.error (Subscriber.js:55) 在 FilterSubscriber._error (Subscriber.js:75) 在 FilterSubscriber.error (Subscriber. js:55) 在 MergeMapSubscriber.notifyError (OuterSubscriber.js:7) 在 InnerSubscriber._error (InnerSubscriber.js:14)
这是我的ProjectService,正在注入我的UserService
import { Injectable } from '@angular/core';
import { HttpClient, HttpErrorResponse, HttpHeaders } from '@angular/common/http';
import { Observable, throwError, of } from 'rxjs';
import { catchError, tap, map } from 'rxjs/operators';
import { AuthHeader } from '../../Shared/Helpers/AuthHeader';
import { UserService } from …Run Code Online (Sandbox Code Playgroud) 我需要在我的 angular 应用程序中创建一个服务,所以我这样做:
@Injectable({
providedIn: 'root'
})
export class PropertiesNameService {
products: string[] = [];
constructor(private http: HttpClient) {
console.log('HI');
this.http.get('****').subscribe(data => {
// console.log(data);
});
}
}
Run Code Online (Sandbox Code Playgroud)
在我的 app.module 我这样做:
import {PropertiesNameService} from './propertiesName/properties-name.service';
....
providers: [PropertiesNameService],
Run Code Online (Sandbox Code Playgroud)
问题是,当我启动应用程序并打开控制台时,我看不到 "HI" 。我使用 angular 8 任何人都可以帮助我吗?
我最近从 Angular 4 更新到 9。我执行了以下操作:
rxjs(必要时添加管道,删除连接)HttpModule(已弃用)以消除与“找不到 HTTP”错误相关的错误并使我的项目重回正轨我现在处于运行ng build / ng serve不会引发任何错误的阶段,并且我能够访问本地主机并获取我的登陆页面。但是,使用我的旧登录表单不起作用。CORS尽管我在其中设置了以下标头,但我不断收到错误express:
app.use(function(req, res, next) {
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, PATCH, DELETE, OPTIONS');
next();
});
Run Code Online (Sandbox Code Playgroud)
Relevant Package Details: "@angular/core": "~9.1.4" <-- all angular components are at this point, "@angular/common": "~9.1.4", "@angular/http": "^7.2.16", "express": "^4.17.1"
我的问题是:
HTTP module是否可以像我想做的那样运行 Angular 9 应用程序?如果有人成功使用它,是否有任何配置更改/是否即插即用?HTTP …我正在创建一个新的 angular 应用程序并使用工厂,但是当我收到一个错误时
错误:[$injector:undef] http://errors.angularjs.org/1.4.5/ $injector/undef?p0=Data at Error (native) at https://ajax.googleapis.com/ajax/libs/ angularjs/1.4.5/angular.min.js:6:416 在 Object.$get ( https://ajax.googleapis.com/ajax/libs/angularjs/1.4.5/angular.min.js:37:32 ) 在 Object.e [as invoke] ( https://ajax.googleapis.com/ajax/libs/angularjs/1.4.5/angular.min.js:39:96 ) 在https://ajax.googleapis.com /ajax/libs/angularjs/1.4.5/angular.min.js:40:410 在 d ( https://ajax.googleapis.com/ajax/libs/angularjs/1.4.5/angular.min.js:38 :308 ) 在 e ( https://ajax.googleapis.com/ajax/libs/angularjs/1.4.5/angular.min.js:39:64) 在 Object.g.instantiate ( https://ajax.googleapis.com/ajax/libs/angularjs/1.4.5/angular.min.js:39:213 ) 在 b.$get ( https://ajax. googleapis.com/ajax/libs/angularjs/1.4.5/angular.min.js:80:257 ) 在 s ( https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0rc1/angular-route .min.js:12:165 )
var app = angular.module('testapp', ['ngRoute']);
app.config(['$routeProvider',
功能($routeProvider){
$routeProvider.
当('/用户列表',{
title: '所有用户列表',
templateUrl: 'userlist.html',
控制器:'列表用户'
})
.when('/个人资料',{
title:'用户详情页面',
templateUrl:'profile.html',
控制器:'listuser'
})
。除此以外({
重定向到:'/用户列表'
});
}])
app.factory("数据", … angular ×6
typescript ×4
angularjs ×3
javascript ×2
rxjs ×2
angular8 ×1
express ×1
factory ×1
observable ×1
upgrade ×1