我需要能够调用一个函数来运行代码来动态检索图像的来源.以下代码段显示了我想要的示例:
<!-- "myFunction" exists in the current scope -->
<img ng-src="myFunction()" />
Run Code Online (Sandbox Code Playgroud)
我确定这必须简单但我在ng-src文档中找不到任何东西!还有人打过这个吗?
提前致谢!
指令(基于答案的示例)
其他人建议指示.我无法发布客户端代码,所以我写了一个简短的例子,说明在plunker中会是什么样子(见这里).核心指令本身是:
app.directive("imageSource", function (){
return { link: function (scope, element, attrs){
element.attr("src", scope.imageUrlArray[attrs.imageSource]);
}
};
});
Run Code Online (Sandbox Code Playgroud)
我知道我在这里作为一个例子可能只是使用ng-src中的变量来完成ng-repeat,但它可以作为一个指令在需要时的样子的例子.
在编写一些代码时,我今天遇到了这种情况.以下面的例子为例:
long valueCast = (long)(10 + intVariable);
long valueTyped = 10L + intVariable;
Run Code Online (Sandbox Code Playgroud)
这两者之间有什么区别,还是编译成完全相同的东西?是否有一个公约对另一个?
所以我知道这不是一个关键问题(两者都有效).我只是很好奇这些差异可能是什么!
编辑 - 修改代码示例,使其更接近我原来的场景.我希望问题清楚,所以我用常量替换了变量.没有意识到编译器会自动运算(从而改变这个问题的答案)
最近我正在编辑其他人的代码,我注意到使用的空格类似于以下内容:
<div>Some text Some other text</div>
Run Code Online (Sandbox Code Playgroud)
我自然地认为浏览器会结合额外的空间,所以这实际上只有四个空格.虽然测试了这个 - 它实际上是7个空格(至少在chrome中)!这是因为,浏览器呈现两个空间之间的中和的nbsp;空间为好.
所以我的问题是,浏览器何时会渲染空白区域,什么时候不会呢?换句话说,何时会渲染单个空格字符而忽略?
JSFiddle演示: http ://jsfiddle.net/L7x7t/3/
背景
这样做的背景是我最近在评论中与另一位知识渊博的用户讨论了如何编译LINQ.我首先"总结"并说LINQ被编译为for循环.虽然这是不正确的,我从其他堆栈如理解这一个是LINQ查询被编译到拉姆达与它的内部循环.然后在第一次枚举变量时调用它(之后存储结果).另一位用户表示LINQ需要额外的优化,例如散列.我找不到支持或反对的任何支持文档.
我知道这似乎是一个非常模糊的观点,但我一直觉得,如果我不理解某些东西是如何完全运作的,那么我很难理解为什么我没有正确使用它.
问题
所以,让我们采取以下非常简单的例子:
var productNames =
from p in products
where p.Id > 100 and p.Id < 5000
select p.ProductName;
Run Code Online (Sandbox Code Playgroud)
在CLR中实际编译的这个语句是什么?LINQ接管了什么优化只是编写一个手动解析结果的函数?这只是语义还是还有更多呢?
澄清
显然我问的是这个问题,因为我不明白LINQ"黑匣子"的内部是什么样的.尽管我理解LINQ很复杂(而且功能强大),但我主要是在寻找对CLR或与LINQ语句等效的功能的基本理解.有很多很棒的站点可以帮助理解如何创建LINQ语句,但是很少有这些站点可以提供有关如何实际编译或运行这些语句的任何指导.
附注 - 我将完全阅读关于linq对象的John Skeet系列.
附注2 - 我不应该将其标记为LINQ to SQL.我理解ORM和微观ORM是如何工作的.这真的是问题的重点.
以下面的例子为例:
string x = null;
var y = String.Empty;
Assert.AreEqual(x, y); // test fails!
Assert.AreEqual(x ?? "", y ?? ""); // passes, but ugly!
Run Code Online (Sandbox Code Playgroud)
我知道空字符串和空字符串不一样,但对于我的特定应用程序,它们基本相同。我的问题是 - 是否有任何快捷方式可以以相同的方式处理空字符串和空字符串?否则我将面临使用空合并运算符的问题(有点难看!)
背景
对于这个问题来自哪里的背景,我正在为一个项目编写集成测试。基本上我将值保存到数据库中,然后再次加载它们并检查两者是否匹配。某些值在保存时为空字符串,但通过 EF 加载时,它们将作为空值返回。这会导致我的许多集成测试失败。
编辑/注意- 我用于测试的值是随机的。这意味着有时该值将是空的,但有时它们会被填充。请记住,我必须在每个字符串比较中使用 null 合并(因此是执行此操作的缩写方式的问题)。
我可以通过两种方式定义这个结构,我希望将其作为参数传递给pinvoke函数.我想知道2之间有什么区别
[StructLayout(LayoutKind.Sequential)]
public struct Rect {
public int left;
public int top;
public int right;
public int bottom;
}
[StructLayout(LayoutKind.Explicit)]
public struct Rect {
[FieldOffset(0)] public int left;
[FieldOffset(4)] public int top;
[FieldOffset(8)] public int right;
[FieldOffset(12)] public int bottom;
}
Run Code Online (Sandbox Code Playgroud)
根据我在这里找到的布局定义,内存中的内容看起来不一样吗?一个优于另一个的任何优势?
我有一个列表的SortedList,我有兴趣找到对应于最长列表的KEY(其中包含最多项目的列表).在代码中,看起来像:
// how the list is defined:
var myList = new SortedList<long, List<string>>();
// EXAMPLE data only:
myList.Add(0, new List<string>());
myList[0].AddRange(new []{"a", "b", "c"});
myList.Add(8, new List<string>());
myList[8].AddRange(new []{"1", "2"});
myList.Add(23, new List<string>());
myList[23].AddRange(new []{"c", "d", "e", "f", "g"});
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,结果应为"23",因为这是最长列表的关键.
我知道如何使用for循环编写它,但我认为这应该是一个简单的LINQ操作.也就是说,我似乎无法获得完全正确的语法!任何帮助表示赞赏!
我正在尝试获取对象列表并将其格式化为电子邮件主题和正文.为了说明我在做什么,请参考以下示例:
public string GetSubject(Person myPerson)
{
return String.Format("To {0}", myPerson.Name);
}
public string GetMessage(Person myPerson)
{
return String.Format("Dear {0}, Your new salary: {1}",
myPerson.Name, myPerson.Salary);
}
public string GetSubject(VacationDay dayOff)
{
return String.Format("Vacation reminder!");
}
public string GetMessage(VacationDay dayOff)
{
return String.Format("Reminder: this {0} is a vacation day!", dayOff.Name);
}
Run Code Online (Sandbox Code Playgroud)
后来我收到了一堆我想要批量发送的电子邮件:
// myEmailObjects is a "List<object>"
foreach (var emailItem in myEmailObjects)
{
SendEmail(from, to, GetSubject(emailItem), GetMessage(emailItem));
}
Run Code Online (Sandbox Code Playgroud)
问题是此代码无法编译,因为编译器无法解析调用哪个GetSubject和哪个GetMessage例程.是否有任何通用的方法来编写它而不使用is或as运算符来检查类型?
我对我来说似乎是一个非常愚蠢的问题.我有一个看起来像这样的查询:
SELECT id FROM myTable WHERE valueCol BETWEEN :x and :y;
Run Code Online (Sandbox Code Playgroud)
:x <= :y当:x > :y它没有返回我想要的行时,这非常有效!对于这种情况,我必须手动反转变量以使其正常工作.
有没有办法写一个变量顺序无关紧要的from子句?
PS>我包括SQL,因为我很确定这只是一个普通的sql问题.
我的对象看起来像:
public class ListItem {
public int ItemId { get; set; }
public int LocationId { get; set; }
// ... other properties ...
}
Run Code Online (Sandbox Code Playgroud)
我有一个List<ListItem>从数据库加载的这些项目列表().这些项目ID 和位置ID 是唯一的.我碰巧知道总共只有10个位置(LocationId为1 - 10).
是否有一个LINQ语句我可以编写删除所有 10个位置都没有出现的项目?
我现在拥有的是:
myList.RemoveAll(x =>
// this line would need repeated 10 times to work!
!myList.Any(y => y.ItemId == x.ItemId && y.LocationId == 1) &&
!myList.Any(y => y.ItemId == x.ItemId && y.LocationId == 2)
// etc...
);
Run Code Online (Sandbox Code Playgroud)
因为这只检查一个区域,我必须为所有区域重复 - 不是非常优雅的代码.任何想法或帮助表示赞赏!
我正在建立一个像这样的指令(超时功能就像一个演示):
app.directive('timeRange', function () {
return {
restrict: 'A',
scope: {
sliderId: "@sliderId",
},
template: '<div id="{{sliderId}}"></div>'+
'<p>From: <span>{{fromVal}}</span>'+
'<span style="float:right;">{{toVal}}</span><span style="float:right;">To: </span>'+
'</p>',
link: function (scope, elem, attrs) {
scope.sliderId = 'NewId';
scope.fromVal = '06:00';
scope.toVal = '17:00';
setTimeout(function(){
scope.fromVal = 'Hello';
log("Changed");
}, 2000);
},
};
});
Run Code Online (Sandbox Code Playgroud)
超时函数运行时,HTML不会更新,值保持不变06:00.如何在变量出现时更新模板?我是否需要以某种方式将其scope链接到我链接属性的部分?