我是Angular的新手,并试图通过新的做事方式加快速度.
我想将一个select元素绑定到一个对象列表 - 这很容易:
@Component({
selector: 'myApp',
template: `<h1>My Application</h1>
<select [(ngModel)]="selectedValue">
<option *ngFor="#c of countries" value="c.id">{{c.name}}</option>
</select>`
})
export class AppComponent{
countries = [
{id: 1, name: "United States"},
{id: 2, name: "Australia"}
{id: 3, name: "Canada"},
{id: 4, name: "Brazil"},
{id: 5, name: "England"}
];
selectedValue = null;
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,看起来selectedValue将是一个数字 - 所选项目的ID.
但是,我实际上想要绑定到country对象本身,以便selectedValue是对象而不仅仅是id.我尝试改变选项的值,如下所示:
<option *ngFor="#c of countries" value="c">{{c.name}}</option>
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用.它似乎将一个对象放在我的selectedValue中 - 但不是我期待的对象.您可以在我的Plunker示例中看到这一点.
我也尝试绑定到change事件,以便我可以根据所选的id自己设置对象; 但是,看起来更改事件在更新绑定的ngModel之前触发 - 这意味着我无法访问此时新选择的值.
是否有一种干净的方法将选择元素绑定到具有Angular 2的对象?
我们正在考虑迁移到 O365;然而,我们开发的软件使用我们当前的 Exchange 服务器在发生错误时向外部用户和支持箱发送电子邮件。
我一直在对此进行测试,以确保我们现有的代码将继续与 O365 一起使用,但到目前为止,我还没有取得很大的成功。
我曾尝试使用 .Net 的 SmtpClient 以及 MailKit 的 SmtpClient,但似乎都不起作用。我不断收到错误(这是来自 MailKit 的错误——.Net 错误是类似的)
“AuthenticationInvalidCredentials:5.7.3 身份验证不成功 [*.prod.exchangelabs.com]”
我可以使用代码中的凭据登录 OWA - 所以我知道凭据是有效的。不能通过 O356 发送电子邮件吗?Exchange 中是否需要进行任何特殊配置才能实现这一点?
这是我迄今为止尝试过的:
邮件套件
var msg = new MimeMessage();
msg.From.Add(new MailboxAddress("Support","support@mydomain.com"));
msg.To.Add(new MailboxAddress("Me","me@mydomain.com"));
msg.To.Add(new MailboxAddress("External User","euser@externaldomain.com"));
msg.Subject = "Test";
msg.Body = new TextPart("plain"){
Text = "Here is a message for you"
};
using(var client = new SmtpClient()){
client.ServerCertificateValidationCallback = (s,c,h,e) => true;
client.AuthenticationMechanisms.Remove("XOAUTH2"); //Not sure what this does. Have tried with and without
client.Connect("smtp.office365.com", …Run Code Online (Sandbox Code Playgroud) 我想创建一个组件myApp,它将在控件的模板中嵌入HTML的属性.但是,某些HTML可能包含其他组件选择器.
import {InfoComponent} from ...
@Component({
selector: 'myApp',
template: `<div [innerHTML]='hData'></div>
<myInfo></myInfo>`,
directives: [InfoComponent]
})
export class AppComponent {
hData = "<myInfo></myInfo>";
}
@Component({
selector: 'myInfo',
template: "<b>This is a test</b>"
})
export class InfoComponent {
}
Run Code Online (Sandbox Code Playgroud)
在这个例子中,我希望看到This is a test显示两次.但是,似乎Angular2引擎没有注意到Component的选择器已被注入,因此模板永远不会为<myInfo></myInfo>通过绑定添加的选择器生成.
有没有办法让Angular2解析选择器的方式与在模板中显式添加的选择器相同?
在我的 javascript 客户端中,我使用 fetch 调用服务器来检索服务器生成的文件。我正在使用以下客户端代码:
var _url = "";
var initParms = {
method: "GET",
mode: 'cors'
}
fetch(_url, initParms)
.then(response => {
if(response.ok){
alert(response.headers.get("content-disposition"));
return response.blob();
}
throw new Error("Network response was not OK.");
})
.then(blob => {
var url = new URL.createObjectURL(blob);
})
Run Code Online (Sandbox Code Playgroud)
这实际上工作得很好。但是,服务器会为该文件生成一个文件名,并将其作为 content-disposition 标头的一部分包含在响应中。
我需要使用服务器生成的文件名将此文件保存到用户的机器上。在 Postman 中,我实际上可以看到响应的内容处置标头设置为:Content-Disposition: attachment;filename=myfilename.txt。
我试图从响应中读取内容配置(请参阅我的 js 代码中的警报),但我总是得到 null(即使相同的响应显示了 Postman 中的内容配置)。
难道我做错了什么?有没有办法使用 fetch 响应来检索文件名?有没有更好的方法从服务器获取文件名和文件?
PS 这是我返回文件的服务器端代码:
控制器动作
public IHttpActionResult GetFile(){
return new FileResult("myfilename.txt","Hello World!");
}
Run Code Online (Sandbox Code Playgroud)
文件结果类
public class FileResult : IHttpActionResult …Run Code Online (Sandbox Code Playgroud) 我的数据库中有很多表.这些表中的每一个都有一个触发器,可以在更新或删除时触发,以记录对AuditLog表的更改.AuditLog表包含以下内容:
Id(PK,int,not null)Action(nchar(1),not null)ActionDate(datetime,not null)ActionUser(nvarchar(100),not null)AuditData(XML(.),not null)
在我的触发器中,我正在执行以下操作:
DECLARE @auditBody XML
SET @auditBody = (select * from deleted as Root for xml auto, elements)
insert into dbo.AuditLog
(Action, ActionDate, ActionUser, AuditData)
select Case
When I.Id is not null then 'U'
Else 'D'
End as Action
,getdate() as ActionDate
,suser_name() as ActionUser
,@auditBody as AuditData
From
deleted D Left Join
inserted I on D.Id = I.Id
Run Code Online (Sandbox Code Playgroud)
这很好用,但是,我想要做的是在tablename的Root元素中添加一个属性,以便AuditData xml看起来像:
<Root tableName = "Person">
<Id>132</Id>
<FirstName>Ryan</FirstName>
...
</Root>
Run Code Online (Sandbox Code Playgroud)
有没有办法用select for ... for xml语句来完成这个?
我没有使用Knockout验证,我试图了解它可以做些什么.
我正在试图弄清楚当出现错误时是否可以在输入标签的右侧显示图标而不是错误消息.并且,如果用户将鼠标悬停在图标上,则会显示错误消息.
有没有人这样做或者想知道如何做到这一点?
谢谢.
编辑:(我正在尝试做的更详细的例子)
假设我在视图模型中有以下内容:
var firstName = ko.observable().extend({required: true});
Run Code Online (Sandbox Code Playgroud)
我的HTML:
<input data-bind="value: firstName" />
Run Code Online (Sandbox Code Playgroud)
我的理解是,如果第一个名称文本框留空,则(默认情况下)文本框右侧会显示一些文本,说明此字段是必需的.
我想要了解的是如何更改右侧显示错误文本的默认行为,在右侧显示一个图标,当悬停在上面时,会弹出错误信息.
所以,一个开始将是这样的:
<div data-bind="validationOptions: {messageTemplate: 'myCustomTemplate'}">
<input data-bind="value: firstName" />
<input data-bind="value: lastName" /> //also required
</div>
<div id='myCustomTemplate'>
//This icon should only display when there is an error
<span class="ui-icon ui-icon-alert" style="display: inline-block"/>
//css/javascript would display this when user hovers over the above icon
<span data-bind="validationMessage: field" />
</div>
Run Code Online (Sandbox Code Playgroud)
如果我正确使用messageTemplate功能,我不知道.我也不知道在customTemplate中绑定文本的内容,以便为每个错误显示正确的错误消息.IOW,firstname和lastname可能有自定义错误消息.如果它们都使用相同的模板,模板如何适应自定义错误消息?
我希望这是有道理的.
我有一个可以构建和运行的 TypeScript 项目,但是我有很多构建错误,这些错误似乎都源于一个错误:
TS4090:(TS)在“C:/[projectpath]/node_modules/@types/node/index.d.ts”和“C:/[Microsoft 的用户路径]/Typescript/3.1/ node_modules/@types/node/index.d.ts'。考虑安装此库的特定版本以解决冲突。
我不明白“安装这个库的特定版本”。我不确定为什么会发现两个版本。
我的应用程序tsconfig.json在ClientApp文件夹中有一个文件。它包含以下内容:
{
"compileOnSave": false,
"compilerOptions": {
"module": "esnext",
"skipLibCheck": true,
"removeComments": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"sourceMap": true,
"target": "es2015",
"lib": [
"es2016",
"es2017",
"dom"
],
"moduleResolution": "node",
"allowJs": true,
"baseUrl": "src"
},
"include": [
"./src/**/*.ts",
"./test/**/*.ts",
"./custom_typings/**/*.d.ts"
],
"atom": {
"rewriteTsconfig": false
},
"typeAcquisition": {"enable": false}
}
Run Code Online (Sandbox Code Playgroud)
我typeAcquisition最近根据对与此相关的其他帖子的评论添加了最近的内容 - 但它没有影响。
我需要做什么才能“安装此库的特定版本”?
环境
该项目面向 .NetCore 2.2。该项目包含提供后端数据的 WebAPI 控制器以及包含使用 Aurelia 创建的 SPA UI 的 ClientApp 文件夹。我使用 WebPack 来构建 …
我正在尝试通过新的3.0 REST API访问我们的MailChimp帐户.我做了以下事情:
using(var http = new HttpClient())
{
var creds = Convert.ToBase64String(Encoding.ASCII.GetBytes("username:mailchimpapikey-us1"));
http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", creds);
string content = await http.GetStringAsync(@"https://us1.api.mailchimp.com/3.0/lists");
Console.WriteLine(content);
}
Run Code Online (Sandbox Code Playgroud)
但是,当我运行此代码时,我得到401错误,其中包含以下json详细信息:
{"type":"http://kb.mailchimp.com/api/error-docs/401-api-key-invalid","title":"API Key Invalid","status":401,"detail":"Your API key may be invalid, or you've attempted to access the wrong datacenter.","instance":"a9fe4028-519e-41d6-9f77-d2caee4d4683"}
Run Code Online (Sandbox Code Playgroud)
我在我的URI中使用的数据中心(本例中为us1)与我的API密钥上的dc匹配.如果我使用MailChimp SDK,我的API密钥有效,所以我知道我的密钥无效.另外,使用Fiddler,我可以看到MailChimp SDK调用与我在URI中执行的相同的dc.
有关为什么我在验证时遇到问题的想法?
编辑 正如问题中所述,我特别要求访问新的3.0 REST API.我试图直接这样做而不是使用第三方包装器.
新的API由http调用组成,所以它应该非常简单.我只是遇到了身份验证问题.
我正在尝试在Angular 2中创建一个自定义管道,它将对一组对象进行排序.我从这篇文章中获得了一些帮助.但是,我似乎无法让这个工作.
我的烟斗看起来像这样:
@Pipe({
name: "orderByAsync",
pure: false
})
export class AsyncArrayOrderByPipe {
private _promise : Promise<Array<Object>>;
private _output: Array<Object>;
transform(promise: Promise<Array<Object>>, args: any): Array<Object>{
var _property : string = "";
var _descending : boolean = false;
this._property = args[0]["property"] || "";
this._descending = args[0]["descending"] || false;
if(!this._promise) {
this._promise = promise.then((result) => {
result.sort((a: any, b: any) => {
if (a[this._property] < b[this._property]) return (this._descending ? 1: -1);
else if (a[this._property] > b[this._property]) return (this._descending ? -1: …Run Code Online (Sandbox Code Playgroud) 编辑 不同flex:1和flex-grow:1之间的区别.虽然答案最终是使用flex而不是flex-grow,但我的问题不是两者之间的区别,而是如何让嵌套的flex-boxes适当地包装.对于那些正在努力解决这个问题的人来说,没有办法在SO上找到答案而不知道问题是使用flex与flex-grow.如果我已经知道这个问题是flex和flex-grow之间的区别,我就不需要问这个问题了.
编辑2 如果这篇文章将被标记为重复,最好将其列为行flexbox内的嵌套列flexbox的副本,而不是flex:1和flex-grow:1之间的差异.
我有一系列div定义为的标签display:flex.它们排成一排,有3列.给出前两列的宽度,允许第三列拉伸以填充剩余的空间.该行也设置为换行,以便在较小的屏幕上,第三列将包裹在其他两列之下.
这是一些基本的示例代码:
style.css文件
.flex-row {
display: flex;
flex-direction: row;
flex-grow: 1;
}
.flex-column {
display: flex;
flex-direction: column;
flex-grow: 1;
border: 1px solid lightgray;
}
.box {
display: flex;
height: 100px;
width: 300px;
min-width: 200px;
flex-shrink: 1;
border: 1px solid green;
}
Run Code Online (Sandbox Code Playgroud)
的index.html
<div class="flex-row" style="flex-wrap:wrap">
<div class="flex-column" style="flex-grow:0">
Column 1
</div>
<div class="flex-column" style="flex-grow:0;width:200px">
Column 2
</div>
<div class="flex-column">
<div class="flex-row" style="min-width:500px;flex-wrap:wrap">
<div class="box">Box 1</div> …Run Code Online (Sandbox Code Playgroud)