此处将为大家介绍关于ubuntu命令libreoffice--convert-tohtmlinput.htmlword2html的详细内容,并且为您解答有关ubuntu命令大全的相关问题,此外,我们还
此处将为大家介绍关于ubuntu 命令 libreoffice --convert-to html input.html word2html的详细内容,并且为您解答有关ubuntu 命令大全的相关问题,此外,我们还将为您介绍关于和之间的区别、Angular - 在接收@Input 时,如何在执行@Input 逻辑之前等待子组件中的其他异步数据、C# convert json to datatable,convert list to datatable、c# – Convert.ToBase64String / Convert.FromBase64String和Encoding.UTF8.GetBytes / Encoding.UTF8.GetString之间的区别的有用信息。
本文目录一览:- ubuntu 命令 libreoffice --convert-to html input.html word2html(ubuntu 命令大全)
- 和之间的区别
- Angular - 在接收@Input 时,如何在执行@Input 逻辑之前等待子组件中的其他异步数据
- C# convert json to datatable,convert list to datatable
- c# – Convert.ToBase64String / Convert.FromBase64String和Encoding.UTF8.GetBytes / Encoding.UTF8.GetString之间的区别
ubuntu 命令 libreoffice --convert-to html input.html word2html(ubuntu 命令大全)
命令成功确实生成一个html,但是网页中的图片没了,只有一个html文件,这怎么办
求大神指点,搞了快2天了,泪哭‘’‘’
回复内容:
命令成功确实生成一个html,但是网页中的图片没了,只有一个html文件,这怎么办
求大神指点,搞了快2天了,泪哭‘’‘’
不知道你的文件是什么样的?我本地创建了一个DOC文件(some.DOC),里面插入了一张图片,执行命令libre
和之间的区别
没有一个愚蠢的问题,所以我们开始:<input type=''button'' />
和之间有什么区别<input type=''submit'' />
?
答案1
小编典典<input type="button" />
按钮不会提交表单-
默认情况下,它们不会执行任何操作。它们通常与JavaScript一起作为AJAX应用程序的一部分使用。
<input type="submit">
按钮会提交用户单击时所在的表单,除非您使用JavaScript另行指定。
Angular - 在接收@Input 时,如何在执行@Input 逻辑之前等待子组件中的其他异步数据
如何解决Angular - 在接收@Input 时,如何在执行@Input 逻辑之前等待子组件中的其他异步数据?
问题介绍
我有 button-address 子组件,它 onInit 加载 mapItems 列表:
ngOnInit() {
this.refreshDataList();
}
protected refreshDataList(): void {
this.subscription = this.getDataList()
.pipe(
switchMap((result: AddressModel[]) => {
this.dataSource.data = [...result].map((d) => {
return {
address: d,selected: this.selectedItems
? this.selectedItems.some(
(it) =>
it.address.pointName ===
d.pointName && it.selected
)
: false,};
});
this.sortList(this.dataSource.data);
return this.preSelectUserPreferencesPOIs();
})
)
.subscribe();
}
protected getDataList(): Observable<AddressModel[]> {
return this.store.pipe(select(selectZoi));
}
this.dataSource.data 的值在 switchMap() 操作符内设置。这个值很重要,因为稍后用户将从列表中选择元素。所以我会监听用户的点击事件,找到this.dataSource.data的正确元素并更新选中的项目。
我的问题是,当应用程序启动时,我还会收到来自另一个流的 @Input,其目的是以编程方式选择 this.dataSource.data:
@input()
set proximityReportPoiZoi(poiZoi: ProximityReportPoiZoi) {
this.toggleSelectedPoiZoi(poiZoi.id);
}
protected toggleSelectedPoiZoi(poiZoiId: string) {
const addressZoneselectionModel = this.dataSource.data.find(
(item) => poiZoiId === item.address.id
);
const address = addressZoneselectionModel.address;
if (addressZoneselectionModel.selected) {
addressZoneselectionModel.selected = false;
this.showHidePoiZoi(address,false);
} else {
addressZoneselectionModel.selected = true;
this.showHidePoiZoi(address,true);
}
}
越野车
但是,由于对 store 的请求需要一些时间,当 @Input(顺便说一下也是一个 observable)被组件接收到时, toggleSelectedPoiZoi() 中的代码找不到合适的项目,因为 this.dataSource.data 仍然是空的:
const addressZoneselectionModel = this.dataSource.data.find(
(item) => poiZoiId === item.address.id
);
问题
如何让我的 @input() 在执行 this.toggleSelectedPoiZoi() 之前等待组件加载 this.dataSource.data 的数据? 此问题仅在应用初始化期间发生。
我尝试过的事情
- 等待 observable 加载数据
@input()
set proximityReportPoiZoi(poiZoi: ProximityReportPoiZoi) {
const updatePoiZoiSeletion = async () => {
await this.refreshDataList().toPromise();
this.toggleSelectedPoiZoi(poiZoi.id);
}
updatePoiZoiSeletion();
}
但它永远不会使用 this.toggleSelectedPoiZoi() 方法执行以下行。如果我将 .toPromise() 更改为 .subscribe(),this.dataSource.data 的值仍然是一个空数组,因此没有项可以选择。
- ngOnChanges
然而没有成功,虽然我可以监听 @Input 值的变化,但我无法监听 this.dataSource.data 的变化。 >
- 通过在父组件的稍后阶段在 ngAfterViewInit() 循环中订阅它来获取 @input() 的值。
Angular 抱怨,因为 @Input 是通过模板传递的,所以 proximityReportPoiZoi$ 属性的值在父组件初始化后发生了变化。查看父模板:
<app-button-address
[proximityReportPoiZoi]="(proximityReportPoiZoi$ | async)"
></app-button-address>
事先非常感谢任何帮助:)
解决方法
记录。对于 Angular 生命周期钩子事件序列,ngOnChanges
将在 ngOnInit
之前触发。但是在 ngOnChanges
中调用整个订阅可能会导致性能问题,因为从 docs:
请注意,这种情况非常频繁,因此您在此处执行的任何操作都会显着影响性能。
所以您可以做的是直接在订阅中使用 @Input
内的 ngOnInit
变量。
export someComponent implements OnInit {
_poiZoi: ProximityReportPoiZoi;
@Input()
set proximityReportPoiZoi(poiZoi: ProximityReportPoiZoi) {
this._poiZoi = poiZoi;
}
ngOnInit() {
this.refreshDataList();
}
protected refreshDataList(): void {
this.subscription = this.getDataList().pipe(
switchMap((result: AddressModel[]) => {
this.dataSource.data = [...result].map((d) => {
return {
address: d,selected: this.selectedItems
? this.selectedItems.some((it) =>
it.address.pointName === d.pointName && it.selected
)
: false,};
});
this.sortList(this.dataSource.data);
this.preSelectUserPreferencesPOIs();
}),map(() => this._poiZoi.id)
)
.subscribe({
next: (poiZoiId: any) => this.toggleSelectedPoiZoi(poiZoi.id),error: (error: any) => console.log(error)
});
}
}
,
我提出了一种基于纯 RxJs 逻辑的方法,它不依赖于 Angular 生命周期方法。
如果我没理解错,你有 2 个流
- 源为
this.getDataList()
且其通知用于设置this.dataSource.data
的流 - 我们将此流称为 obs_1 - 发出值的流,该值传递给
proximityReportPoiZoi
输入并用于选择值列表的初始值 - 我们将此流称为 obs_2立>
这里的问题是确保我们按照严格的时间顺序执行以下步骤
- 接收来自obs_2 的通知
-
subscribe
到 obs_1 并处理其通知 - 在处理obs_1的通知后处理obs_2的通知。
就纯 rxJs 逻辑而言,这是使用 concatMap
的好例子。
逻辑可能是这样的
obs_2.pipe(
concatMap(res_2 => obs_1.pipe(
map(res_1 => ([res_1,res_2))
)
)
).subscribe(
([addressModelArray,poiZoi]) => {
setDataSourceData(addressModelArray) // i.e. the logic in switchMap
toggleSelectedPoiZoi(poiZoi.id);
}
)
您可以尝试在您的 button-address
组件中实现这种方法。这可以通过将 obs_2 实现为在 Subject
set 方法中发出的 proximityReportPoiZoi
来实现。
我将使用的方法是尝试将所有这些逻辑隔离到一个 service
中,该 button-address
被注入到 service
组件中。此 pipe
知道 obs_1 和 obs_2,因此可以在 public listAndSelectedVal$ = obs_2.pipe(
concatMap(res_2 => obs_1.pipe(
// apply some logic to filter the default value
filter(res_1 => res_1.length > 0),map(res_1 => ([res_1,res_2))
)
)
)
中实现此逻辑并将其公开为公共 API Observable,类似这样
button-address
listAndSelectedVal$
组件需要订阅 tp combineLatest
才能执行其工作。
如果 obs_1 和 obs_2 在完成之前可以发出多次,也可以探索 int n = 24;
Function<Integer,String> f = x -> x % 2 == 1 || (x >= 6 && x <= 20) ? "Weird" : "Not Weird";
System.out.println(f.apply(n));
的使用。
这种方法会使测试更容易,因为测试服务比测试组件更简单。
C# convert json to datatable,convert list to datatable
1 static DataTable ConvertJsonToTable(string jsonValue)
2 {
3 DataTable dt = (DataTable)JsonConvert.DeserializeObject(jsonValue, typeof(DataTable));
4 return dt;
5 }
static DataTable ConvertListToDataTable<T>(List<T> dataList)
{
DataTable dt = new DataTable();
PropertyDescriptorCollection props = TypeDescriptor.GetProperties(typeof(T));
for(int i=0;i<props.Count;i++)
{
PropertyDescriptor prop = props[i];
dt.Columns.Add(prop.Name, prop.PropertyType);
}
object[] values = new object[props.Count];
foreach(T item in dataList)
{
for(int i=0;i<values.Length;i++)
{
values[i] = props[i].GetValue(item);
}
dt.Rows.Add(values);
}
return dt;
}
static DataTable ConvertTToDT<T>(List<T> dataList)
{
if(dataList==null || !dataList.Any())
{
return null;
}
DataTable dt = new DataTable();
PropertyInfo[] pis = typeof(T).GetProperties();
for(int i=0;i<pis.Count();i++)
{
dt.Columns.Add(pis[i].Name, pis[i].PropertyType);
}
object[] valuesArr = new object[pis.Count()];
foreach(var data in dataList)
{
for(int i=0;i<pis.Count();i++)
{
valuesArr[i] = pis[i].GetValue(data);
}
dt.Rows.Add(valuesArr);
}
return dt;
}
c# – Convert.ToBase64String / Convert.FromBase64String和Encoding.UTF8.GetBytes / Encoding.UTF8.GetString之间的区别
private byte[] key = Encoding.ASCII.GetBytes("abcdefgh"); private byte[] IV = Encoding.ASCII.GetBytes("hgfedcba"); private byte[] encrypted; public Form1() { InitializeComponent(); } private void btnEncrypt_Click(object sender,EventArgs e) { this.textBox2.Text = this.Encrypt(this.textBox1.Text); } private void btnDecrypt_Click(object sender,EventArgs e) { this.textBox3.Text = this.Decrypt(this.textBox2.Text); } private string Encrypt(string plainText) { try { using (DESCryptoServiceProvider crypto = new DESCryptoServiceProvider()) { crypto.Key = this.key; crypto.IV = this.IV; ICryptoTransform transform = crypto.CreateEncryptor(crypto.Key,crypto.IV); using (MemoryStream stream = new MemoryStream()) { using (CryptoStream cryptoStream = new CryptoStream(stream,transform,CryptoStreamMode.Write)) { using (StreamWriter writer = new StreamWriter(cryptoStream)) { writer.Write(plainText); } encrypted = stream.ToArray(); } } } return Convert.ToBase64String(encrypted); } catch (Exception) { throw; } } private string Decrypt(string cipherText) { try { string plainText = string.Empty; using (DESCryptoServiceProvider crypto = new DESCryptoServiceProvider()) { crypto.Key = this.key; crypto.IV = this.IV; ICryptoTransform transform = crypto.CreateDecryptor(crypto.Key,crypto.IV); using (MemoryStream stream = new MemoryStream(Convert.FromBase64String(cipherText))) { using (CryptoStream cryptoStream = new CryptoStream(stream,CryptoStreamMode.Read)) { using (StreamReader reader = new StreamReader(cryptoStream)) { plainText = reader.ReadToEnd(); } } } } return plainText; } catch (Exception) { throw; } }
一切都按预期工作.但如果我更换
return Convert.ToBase64String(encrypted);
和
using (MemoryStream stream = new MemoryStream(Convert.FromBase64String(cipherText)))
至
return Encoding.UTF8.GetString(encrypted);
和
using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(cipherText)))
我在CryptoStream System.NotSupportedException中有错误.在诊断代码之后,我发现Encoding.UTF8.GetBytes(cipherText)具有比加密更多的字节
那么使用Convert.From / ToBase64String和Encoding.UTF8.GetBytes / GetString有什么区别呢?
解决方法
Base64是二进制到文本编码.它将字节编码为文本.
在这种情况下你需要后者.
Encoding.UTF8.GetString解码一个UTF-8编码的字节数组,如果存在无效的字节序列(这很有可能是像密文一样给它随机字节),那么它是有损的.
关于ubuntu 命令 libreoffice --convert-to html input.html word2html和ubuntu 命令大全的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于和之间的区别、Angular - 在接收@Input 时,如何在执行@Input 逻辑之前等待子组件中的其他异步数据、C# convert json to datatable,convert list to datatable、c# – Convert.ToBase64String / Convert.FromBase64String和Encoding.UTF8.GetBytes / Encoding.UTF8.GetString之间的区别等相关内容,可以在本站寻找。
本文标签: