抱歉,如果这里已经回答了这个问题,但我找不到与我们的特定场景匹配的任何内容,所以在这里!
我们的开发团队已经讨论过关于 angular 模板中的函数调用。现在作为一般经验法则,我们同意您不应该这样做。但是,我们已经尝试讨论什么时候可能会好起来。让我给你一个场景。
假设我们有一个包含在 ngIf 中的模板块,它检查多个参数,如下所示:
<ng-template *ngIf="user && user.name && isAuthorized">
...
</ng-template>
Run Code Online (Sandbox Code Playgroud)
与以下内容相比,性能是否会有显着差异:
模板:
<ng-template *ngIf="userCheck()">
...
</ng-template>
Run Code Online (Sandbox Code Playgroud)
打字稿:
userCheck(): boolean {
return this.user && this.user.name && this.isAuthorized;
}
Run Code Online (Sandbox Code Playgroud)
所以总结一下这个问题,最后一个选项会不会有任何显着的性能成本?
我们更愿意使用第二种方法,在需要检查超过 2 个条件的情况下,但网上很多文章都说模板中的函数调用总是不好,但在这种情况下真的有问题吗?
所以我在获取代码中特定字段的值时遇到问题 - 我做了这个非常简单的示例来展示我的问题,这里是 JSFiddle:https: //jsfiddle.net/c3jtg60v/
HTML:
<p id="theInput">
desired-value
</p>
Run Code Online (Sandbox Code Playgroud)
JavaScript:
var value = document.getElementById("theInput").value;
console.log(value);
Run Code Online (Sandbox Code Playgroud)
按原样,我分配了一个id 为“theInput”的p元素,其中我有所需的值,我想在我的 javascript 中使用它。
目前,我想做的就是 console.log 值,但是当我这样做时,我在控制台中记录的所有内容都是“未定义”。我真正想要记录到控制台的是“所需值”,
我一直在开发一个程序,假设使用 javamail 来阅读收件箱,如果电子邮件包含特定的字符串,则应该打开它。
首先,这是我第一次尝试使用这个 javamail api - 我很确定我的属性都搞砸了 - 任何人都可以给我正确设置 javamail 属性的提示吗?
其次,我似乎可以通过 API 进行连接,但是如果我尝试搜索主题并且主题为空,则会出现空指针异常 - 但是如果我不尝试将主题与“Ordretest”匹配,我没有空指针 - 任何提示都会有很大帮助:)
package vildereMail;
import java.util.Properties;
import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.internet.InternetAddress;
import javax.mail.search.FromTerm;
import javax.mail.search.SearchTerm;
import javax.mail.search.SubjectTerm;
public class vildereMail {
public boolean match(Message message) {
try {
if (message.getSubject().contains("Ordretest")) {
System.out.println("match found");
return true;
}
} catch (MessagingException ex) {
ex.printStackTrace();
}
return false;
};
public static void main(String[] …Run Code Online (Sandbox Code Playgroud) 这可能是一个简单的修复,但我在任何地方都找不到它 - 也许我使用了错误的术语,所以如果我重复了一个已经被问过的问题,我深表歉意。
我创建了这个 stackblitz 演示:https ://stackblitz.com/edit/angular-ftv8ez
我遇到了这个问题,我有一个固定宽度 (300px) 的容器 div。
在其中,我有一些框 div,也有固定宽度 (300px)。
容器 div 有 overflow-x: scroll,所以这个想法是你可以在 div 溢出时滚动它。
但是,结果并未按预期执行。容器 div 的开头被缩短,这导致无法将第一个框滚动到视图中。
非常欢迎任何提示或帮助!
首先我要说的是,我确实查看了有关 ngTemplateOutlet 的其他几个问题(例如:Angular 2 动态更改 ngTemplateOutlet 中的模板或 具有动态值的 ngTemplateOutlet),但它们并没有真正涵盖我想要做的事情,或者也许我不明白如何将逻辑应用于我想要实现的目标。
我的目标:
我有一个页面,我希望能够在其中更改模板的显示顺序。
我有两个简单的模板,“颜色”和“字体”:
<ng-template #colors>
Red: #FF0000
Green: #00FF00
Blue: #0000FF
</ng-template>
<ng-template #fonts>
Helvetica
Verdana
Times New Roman
</ng-template>
Run Code Online (Sandbox Code Playgroud)
我可以按照预定义的顺序显示这些内容:
<div>
<ng-container *ngTemplateOutlet="colors"></ng-container>
</div>
<div>
<ng-container *ngTemplateOutlet="fonts"></ng-container>
</div>
Run Code Online (Sandbox Code Playgroud)
我的问题是,我不知道如何根据组件上的变量显示这些模板。我的组件包含一个数组变量,其中包含我要显示的模板的顺序和名称:
public order: ['fonts', 'colors'];
Run Code Online (Sandbox Code Playgroud)
请注意,此处模板的顺序已切换,因此应首先显示“字体”,然后显示“颜色”。
我的想法是根据 order 变量分配 *ngTemplateOutlet 值,如下所示:
<ng-container [ngTemplateOutlet]="order[0]"></ng-container>
<ng-container [ngTemplateOutlet]="order[1]"></ng-container>
Run Code Online (Sandbox Code Playgroud)
但是当我这样做时,我收到以下控制台错误:
TypeError: templateRef.createEmbeddedView is not a function
Run Code Online (Sandbox Code Playgroud)
我不太确定我在哪里出了问题,或者如何让 *ngTemplateOutlet 从组件上的数组变量中获取它的模板名称。
我为它创建了这个 stackblitz:https ://stackblitz.com/edit/angular-q7uqbx
任何帮助将非常感激!
亲切的问候,
杰斯珀