取自Angular文档:
角度表达式
角度表达式是类似JavaScript的代码片段,主要放在插值绑定中,例如
<span title="{{ attrBinding }}">{{ textBinding }}</span>
Run Code Online (Sandbox Code Playgroud)
而且还直接用在指令属性中
ng-click="functionExpression()".例如,这些是Angular中的有效表达式:
1 + 2 a + b user.name items [index]
但是我对何时使用双括号语法{{}}以及何时不使用时有点困惑.文档似乎表明在指令属性中使用表达式时不需要它们(参见上面的ng-click示例).
虽然下面的代码可以提供相反的轶事证据:
<ul id="Menu">
<li ng-repeat="appModule in applicationModules"
id="{{appModule.Name}}"
ng-class="{ 'selected' : selectedAppModule == '{{appModule.Name}}' }"
ng-click="menuClicked(appModule.Name)">
<a href="#Content/{{appModule.Name}}">{{appModule.Display}}</a>
</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
请注意在ng-class指令中如何使用双括号,而在ng-click指令中则不然.
你怎么知道何时使用它们以及何时不使用它们?
我了解错误消息:
类型'()=>无效'不能分配给类型'()=> {}'
很好,它告诉我存在类型转换问题。但是我无法弄清楚为什么编译器认为类型不同。
该代码的背景是我有一个打字稿类,该打字稿类被赋予了一个功能,然后将其存储为成员。我希望能够使用一个空的“ noop”函数来初始化该成员,以便在使用前不必对它进行null检查。
我设法将问题减少到以下示例测试代码:
export class Test {
private _noop: () => {};
constructor(
) {
this._noop = () => { }; //I guess the compiler thinks this is returning in a new empty object using the json syntax
this._noop = this.noop; //I would have thought this shoud definitely work
this._noop = () => undefined; //This does works
}
public noop(): void {
//Nothing to see here...
}
}
Run Code Online (Sandbox Code Playgroud)
构造函数中的三个语句都旨在完成相同的工作:使用no操作函数初始化成员。但是,只有最后一条语句有效:
this._noop = () => undefined;
Run Code Online (Sandbox Code Playgroud)
其他两个语句产生编译错误。
有谁知道为什么编译器似乎无法匹配类型?
有没有人知道如何使SvcUtil.exe连接到使用TLS 1.2的端点?我正在使用.Net Framework版本4.6.1.
当我使用VS 2017进行连接时,我可以看到使用Fiddler,使用ClientHello握手在隧道上建立请求Version: 3.3 (TLS/1.2).但是,当我直接使用svcutil.exe时,它会尝试使用尝试使用ClientHello握手建立隧道的请求,Version: 3.1 (TLS/1.0)然后失败.
我希望我能够在SvcUtil.exe.config中设置如下内容:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
<generatePublisherEvidence enabled="false" />
</runtime>
<system.net>
<settings>
<servicepointmanager securityprotocol="tls12">
</servicepointmanager>
</settings>
</system.net>
</configuration>
Run Code Online (Sandbox Code Playgroud)
这将镜像ServicePointManager类上的等效SecurityProtocol属性.但是,这只会产生以下错误:
Unrecognized element 'servicepointmanager'.
Run Code Online (Sandbox Code Playgroud)
我使用SvcUtil如下:
SvcUtil https://myserver/myservice/mex
Run Code Online (Sandbox Code Playgroud) 我现在的场景是我正在编写一些代码的单元测试,该代码使用另一个使用依赖注入的代码库,并提供一个UnitContainerExtension来引导库所需的所有具体类.但是在我的单元测试中,我希望能够模拟一个或两个注册类型.现在理论上根据所有帖子我可以看到注册然后重新注册类型应该没有问题.后一个定义/映射取代了前者.
然而,这似乎在实践中不起作用.现在我可以从库扩展中复制类型注册列表,并省略/更改我需要模拟的那些.但是我认为这似乎不对,也许我错过了一些东西.
以下是代码的示例(已经简化并且内联了UnitContainerExtension):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Practices.Unity;
using Moq;
namespace UnityTest
{
class Program
{
private static IFooBar _mockFooBar;
public static IFooBar MockFooBar
{
get
{
return _mockFooBar ?? (_mockFooBar = Mock.Of<IFooBar>(fb => fb.Test(It.IsAny<string>()) == "I am mockery of FooBar!"));
}
}
static void Main(string[] args)
{
UnityContainer container = new UnityContainer();
//Registration of concrete class done inside extension
container.RegisterType<IFooBar, FooBar>();
//Re-registering
container.RegisterType<IFooBar>(new InjectionFactory(uc => MockFooBar));
//This should resolve to the mocked foobar but …Run Code Online (Sandbox Code Playgroud) 我有一个扩展方法,用于获取强类型Expression<Func<>>参数,但出于实现原因,我不得不将其更改为使用弱类型版本.这对表达式参数产生了奇怪的影响,因为它现在似乎是在对"转换"方法的显式调用中包装lambda表达式.
以前的参数看起来像:
m => m.Data
Run Code Online (Sandbox Code Playgroud)
现在它看起来如下:
m => Convert(m.Data)
Run Code Online (Sandbox Code Playgroud)
我已使用以下示例代码复制了该问题:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Linq.Expressions;
namespace ConsoleApplication
{
static class Program
{
static void Main(string[] args)
{
Model model = new Model()
{
Data = 123
};
Test(m => m.Data, m => m.Data);
Console.ReadLine();
}
public static void Test<TProperty>(Expression<Func<Model, TProperty>> strongTyped, Expression<Func<Model, object>> weakTyped)
{
Console.WriteLine("Strong Typed: {0}", strongTyped);
Console.WriteLine("Weak Typed: {0}", weakTyped);
}
}
public class Model
{
public int Data
{ …Run Code Online (Sandbox Code Playgroud) 我有一行JavaScript会在jQuery中导致语法错误:
$(document).find('.Container').replaceWith($(data).find('.Content'));
Run Code Online (Sandbox Code Playgroud)
如果代码本身无害,那么代码本身将从ajax调用中获取响应数据,以一些内部内容为目标,然后将该内容替换为容器div元素的内容。但是,当响应数据中有前导空格时,它将在jQuery中引起语法错误。
例如,以下剥离响应数据就可以了:
$("<!DOCTYPE html><html><head></head><body></body></html>")
Run Code Online (Sandbox Code Playgroud)
但是,对于前面的空格,相同的响应不是:
$(" <!DOCTYPE html><html><head></head><body></body></html>")
Run Code Online (Sandbox Code Playgroud)
并给出以下错误信息:
Syntax error, unrecognized expression: <!DOCTYPE html><html><head></head><body></body></html>
Run Code Online (Sandbox Code Playgroud)
我猜想这可能与jQuery测试jQuery函数的参数($()是其别名)以区分不同的重载的方式有关。
我还注意到jQuery函数$.parseHTML()似乎可以应付前导空格,因为下面的代码行可以:
$.parseHTML(" <!DOCTYPE html><html><head></head><body></body></html>")
Run Code Online (Sandbox Code Playgroud)
有谁知道这是否是jQuery的错误?还是只是简单的情况,该jQuery()函数要求它不应有前导空格。
顺便说一句jQuery的版本是1.9.1
更新**************************************************** ******************************************
感谢同事的提示,我发现这是一个实际的错误(尽管jQuery团队最初并未将其视为一个错误-请阅读注释)。看起来它已经/已经在jQuery 1.10 / 2.0中被“修复”。
c# ×2
angularjs ×1
javascript ×1
jquery ×1
lambda ×1
no-op ×1
svcutil.exe ×1
tls1.2 ×1
typescript ×1
wcf ×1