如何使用Array.filter()返回唯一id的name?
我的场景与我研究的解决方案略有不同,我有一个对象数组.我找到的每个例子都包含一个单值的平面数组.
data=[
{id: 555, name: "Sales", person: "Jordan" },
{id: 555, name: "Sales", person: "Bob" },
{id: 555, name: "Sales", person: "John" },
{id: 777, name: "Accounts Payable", person: "Rhoda" },
{id: 777, name: "Accounts Payable", person: "Harry" },
{id: 888, name: "IT", person: "Joe" },
{id: 888, name: "IT", person: "Jake" },
];Run Code Online (Sandbox Code Playgroud)
var unique = data.filter(
function (x, i) {
return data[i].id.indexOf(x.id) === i
});Run Code Online (Sandbox Code Playgroud)
提前致谢.
我目前enum在我的html视图中直接引用int值,但是我更希望通过枚举名称来引用-例如,就像我在TypeScript代码中所做的那样
if (this.nodeType === NodeType.HostService) {
...
}
Run Code Online (Sandbox Code Playgroud)
我有一个枚举定义为:
if (this.nodeType === NodeType.HostService) {
...
}
Run Code Online (Sandbox Code Playgroud)
并且在我的html视图中,我正在模态中加载特定的组件(包括反应形式),如下所示-而这完全取决于该enum值:
export enum NodeType {
Location,
Host,
HostAccessPoint,
HostStorage,
HostService
}Run Code Online (Sandbox Code Playgroud)
在我的组件中,我正在设置that.selectedNodeTypeEnum:
<div class="modal-body">
<config-edit-storage-node *ngIf="selectedNode && selectedNodeTypeEnum===3"
[node]="selectedNode" [nodeType]="selectedNodeTypeEnum"
(cancelEdit)="cancelEdit()" (saveEdit)="onSaveEdit($event)">
</config-edit-storage-node>
<config-edit-service-node *ngIf="selectedNode && selectedNodeTypeEnum===4"
[node]="selectedNode" [nodeType]="selectedNodeTypeEnum"
(cancelEdit)="cancelEdit()" (saveEdit)="onSaveEdit($event)">
</config-edit-service-node>
</div>Run Code Online (Sandbox Code Playgroud)
最重要的是,我宁愿在html中使用这种编码风格:
*ngIf="selectedNode && selectedNodeTypeEnum===NodeType.HostService"
Run Code Online (Sandbox Code Playgroud)
而不是引用枚举值本身。
能做到吗?
谢谢并恭祝安康。
我想将以下 XML 文档发送到我的 Web Api 2 控制器;但是,该[FromBody]参数始终为空。
这是请求 XML 正文:
<razorInbound server="PortfolioExposureServer" request="lookupRiskPointRecord">
<caller>RazorClient</caller>
<responseMode>xml</responseMode>
<body>
<conditions>
<fromOffset>0</fromOffset>
<top>100</top>
<condition>
<keyPath>
<keyElement nodeOffset='1'>Currency</keyElement>
<keyElement nodeOffset='2'>ID</keyElement>
</keyPath>
<lookupValue>USD</lookupValue>
</condition>
</conditions>
</body>
</razorInbound>Run Code Online (Sandbox Code Playgroud)
使用Postman发送请求,如下:
POST /api/razorXmlRequest HTTP/1.1
Host: localhost:5000
Content-Type: application/xml
Cache-Control: no-cache
Postman-Token: 6ca91ebf-31e0-77f2-6f81-cb9993b69b1a
<razorInbound server="PortfolioExposureServer" request="lookupRiskPointRecord">
<caller>RazorClient</caller>
<responseMode>xml</responseMode>
<body>
<conditions>
<fromOffset>0</fromOffset>
<top>100</top>
<condition>
<keyPath>
<keyElement nodeOffset='1'>Currency</keyElement>
<keyElement nodeOffset='2'>ID</keyElement>
</keyPath>
<lookupValue>USD</lookupValue>
</condition>
</conditions>
</body>
</razorInbound>Run Code Online (Sandbox Code Playgroud)
和 Web Api 2 控制器:
注意:该param参数始终为null
我相信我需要一个正确的类定义来正确映射 XML 请求,但我不确定如何构造它。
using System; …Run Code Online (Sandbox Code Playgroud)我正在使用vis.js库,并通过svg标签使用自定义 HTML 呈现节点。
我的在线项目位于:https : //stackblitz.com/edit/visjs-with-angular
我遇到的问题是,当我试图将图像添加到div,这是内部的svg。
您可以vis.component.ts在我的项目的“app\app\vis”文件夹中看到 及其关联的 HTML 视图文件。
在drawSvgNetwork()函数中,您将看到我构建 SVG 的位置。我想我可以添加一个<i>带有的标签background-image url,但是当 vis.js 渲染节点时它似乎没有渲染:
var svg = '<svg xmlns="http://www.w3.org/2000/svg" width="390" height="65">' +
'<rect x="0" y="0" width="100%" height="100%" fill="#7890A7" stroke-width="20" stroke="#ffffff" ></rect>' +
'<foreignObject x="15" y="10" width="100%" height="100%">' +
'<div xmlns="http://www.w3.org/1999/xhtml" style="font-family:Arial; font-size:30px">' +
' <em>I</em> am' +
'<span style="color:white; text-shadow:0 0 20px #000000;">' +
' HTML in SVG!</span>' +
// …Run Code Online (Sandbox Code Playgroud)关于使用ng-src以显示图像,此代码在运行时期间工作 - 但不在初始页面加载上:
<div class="imageHolder" ng-click="openWidgetSettings(widget);" ng-show="widget.showInitImage">
<img ng-src="../../Images/{{widget.initImage}}" />
<div class="caption">Click to configure</div>
</div>
Run Code Online (Sandbox Code Playgroud)
在我的初始页面加载我得到错误:
GET http://localhost:33218/Images/ 403 (Forbidden)
Run Code Online (Sandbox Code Playgroud)
然而在运行时,当我将图像拖放到仪表板上时,前端不再抱怨了.
我确实意识到我正在使用的仪表板框架是在我的页面上动态添加div,然后渲染图像; 但是,为什么它此时不抱怨?
换句话说,我试图避免使用这样的完整路径:
<img ng-src="http://localhost:33218/Images/{{widget.initImage}}" />
Run Code Online (Sandbox Code Playgroud)
****更新****
这段代码可以工作,我不需要指定".../.. /"相对路径.
<div class="imageHolder" ng-click="openWidgetSettings(widget);" ng-hide="widget.gadgetConfigured">
<img ng-src="Images/{{widget.initImage}}" />
<div class="caption">Click to configure</div>
</div>
Run Code Online (Sandbox Code Playgroud)
另外,我的{{widget.initImage}}在重新加载时又回来了 - 一个应用程序错误!
在 Chrome 最近推出了一些政策更新之后,我们现在在使用 Selenium Web Driver 运行 Protractor E2E 测试时遇到了解包扩展问题。
错误是:
Failed to load extension from:C:\Users\...\AppData\Local\Temp\scoped_dir9090_11922\internal.
Run Code Online (Sandbox Code Playgroud)
管理员禁止加载未打包的扩展。
这个内部文件夹是从 internal.zip 解压出来的,包含以下内容manifest.json:
{
"key": "MIGfMA0GCSqGSI...",
"name": "Chrome Automation Extension",
"version": "1",
"manifest_version": 2,
"description": "Exposes extension APIs for automating Chrome",
"background": {
"scripts": ["background.js"]
},
"permissions": [
"tabs", "management", "<all_urls>"
]
}
Run Code Online (Sandbox Code Playgroud)
在量角器配置文件中,我们尝试在此处禁用扩展,但没有效果:
multiCapabilities: [
{
browserName: 'chrome',
chromeOptions: {
args: [
'--disable-extensions', '--disable-plugins', '--start-maximized'
]
}
},
]
Run Code Online (Sandbox Code Playgroud)
google-chrome-extension selenium-chromedriver selenium-webdriver protractor
通过 http Post,我将 html FormData 发送到我的 Web Api2 控制器。FormData 包含一张或多张图像以及客户端属性。
我的前端 Angular 5 服务发送http post(工作正常):
var url = this.host + 'import/MediaUpload';
return this.http.post(url, formData, options)
.map((result: any) => result._body)
.catch(this.handleError);
Run Code Online (Sandbox Code Playgroud)
我想将 FormData 转换为 MediaInfo 类的通用列表(在此MediaUpload()方法下面定义):
public async Task<HttpResponseMessage> MediaUpload(int projectId, int sectionId)
{
// Check if the request contains multipart/form-data.
if (!Request.Content.IsMimeMultipartContent())
{
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
var provider = await Request.Content.ReadAsMultipartAsync<InMemoryMultipartFormDataStreamProvider>(new InMemoryMultipartFormDataStreamProvider());
//access form data
NameValueCollection formData = provider.FormData;
List<MediaInfo> listMedia = new List<MediaInfo>();
//dynamic …Run Code Online (Sandbox Code Playgroud) 使用POSTMAN,我正在努力检索我的Identity Server 3令牌.
错误代码是: 400 Bad Request
以下是详细信息:
POST/identity/connect/token HTTP/1.1
Host:localhost:44358
Content-Type:应用程序; x-www-form-urlencoded
Cache-Control: 无缓存
Postman-Token: 57fc7aef-0006-81b2-8bf8-8d46b77d21d1
username= MYUSER-ID&password= MY-PASSWORD&grant_type= password&client_id= rzrwebguiangulajsclient&client_secret= myclientsecret&redirect_uri= https:// localhost:44331/callback
我用一个简单的Visual Studio 2015 WebApi项目做了类似的事情,其终点是\token.
任何指导/建议表示赞赏......
问候,鲍勃
我需要将动态选项卡添加到某些User Preferences屏幕。主首选项选项卡可以是具有静态内容的静态选项卡,但第二个选项卡应该具有嵌套mat-tab元素。
这些额外的动态首选项来自后端,然后允许我使用*ngFor来呈现额外的选项卡。
我现在看到的问题是 tab labels。标签文本从第一个嵌套选项卡获取其值,而不是从label我正在设置的属性中获取值。
请在 stackblitz 上查看我的示例 - https://stackblitz.com/edit/mat-tabs-nested?embed=1&file=app/tab-group-async-example.html
在线项目的代码片段是:
<mat-tab-group>
...
<mat-tab label="More Dynamic Preferences">
<!-- NESTED HERE -->
<mat-tab-group>
<mat-tab *ngFor="let tab of asyncTabs | async">
<ng-template mat-tab-label>{{tab.label}}</ng-template>
{{tab.content}}
</mat-tab>
</mat-tab-group>
</mat-tab>
</mat-tab-group> Run Code Online (Sandbox Code Playgroud)
如果单击“更多动态首选项”选项卡,则选项卡标题文本将变为“First”。同样的情况发生在第二个选项卡上,我正在同步加载其选项卡内容,而不是异步示例。
我正在使用 Kendo 树列表小部件,并且很失望地看到没有rowTemplate选项,因为 Kendo 网格上没有。
我看到一个columnTemplate选项(即http://docs.telerik.com/kendo-ui/api/javascript/ui/treelist#configuration-columns.template),但这会影响整个列。
但是,我需要钻取每个单元格值并根据比率设置 css 颜色属性(即 If value/benchmark < .2、assign <span style='color:red;'>,但我的颜色值是动态的。
上有一个dataBound:anddataBinding:事件 treelist,但我仍在尝试弄清楚如何截取每个单元格值并在完成计算后设置颜色。
var treeOptions = {
dataSource: ds,
columns: colDefs,
selectable: true,
scrollable: true,
resizable: true,
reorderable: true,
height: 320,
change: function (e) {
// push selected dataItem
var selectedRow = this.select();
var row = this.dataItem(selectedRow);
},
dataBound: function (e) {
console.log("dataBinding");
var ds = e.sender.dataSource.data();
var rows = e.sender.table.find("tr");
}
}; …Run Code Online (Sandbox Code Playgroud)