我有一个页面,其中将包含证券(子组件)列表的ClientPortfolio(父组件)加载到v数据表列表中。
我遇到的问题是,每次我单击列表中的安全性时,ClientPortfolio都会完全重新加载,从而导致整个列表被刷新,从而导致滚动和所选类重置,以及不必要的性能开销。我看过Vue的文档,似乎没有什么能指出如何仅在具有参数的情况下刷新子组件的,看起来每次路由选择安全性时都会随着路由的更改而刷新父组件。 Vue 知道只有子(嵌套路由)在变化,因此只需要重新加载子组件
我得到的最接近的答案在https://github.com/vuejs/vue-router/issues/230上进行了说明,该代码未在代码中说明如何实现此目的。
route.js:
routes: [
{
path: '/client/:clientno/portfolios/:portfolioNo',
component: ClientPortfolios,
children: [
{ path: 'security/:securityNo', component: Security }
]
},
]
Run Code Online (Sandbox Code Playgroud)
ClientPortfolios.vue中的路由器链接:
<router-link tag="tr" style="cursor:pointer"
:to="`/client/${$route.params.clientno}/portfolios/${selectedPortfolioSequenceNo}/security/${props.item.SecurityNo}-${props.item.SequenceNo}`"
:key="props.item.SecurityNo+props.item.SequenceNo">
</router-link>
Run Code Online (Sandbox Code Playgroud)
ClientPortfolios.vue中的路由器视图(用于安全组件):
<v-flex xs10 ml-2>
<v-layout>
<router-view :key="$route.fullPath"></router-view>
</v-layout>
</v-flex>
Run Code Online (Sandbox Code Playgroud)
任何有关如何防止父母被重新加载的提示表示赞赏。
编辑:试图更接近该问题,我注意到,每当我更改安全性时,ClientPortfolios中的“关键”属性都会更改(如上面的Vue调试窗口所示),这可能是原因吗?尽管它不是子组件,是否可以将密钥分配给ClientPortfolios组件?还是在导航到其他证券时不更新其密钥的方法?
更新:完整代码
ClientPortfolios.vue
<template>
<v-layout row fill-height>
<v-flex xs2>
<v-layout column class="ma-0 pa-0 elevation-1">
<v-flex>
<v-select v-model="selectedPortfolioSequenceNo" :items="clientPortfolios" box label="Portfolio"
item-text="SequenceNo" item-value="SequenceNo" v-on:change="changePortfolio">
</v-select>
</v-flex>
<v-data-table disable-initial-sort :items="securities" item-key="Id" hide-headers hide-actions
style="overflow-y: auto;display:block;height: calc(100vh - 135px);"> …Run Code Online (Sandbox Code Playgroud) 我正在尝试以编程方式在IHttpHandler上下文中的自定义页面中呈现报表查看器
ReportViewer rv = new ReportViewer();
ReportDataSource rds = new ReportDataSource();
rds.Name = "Report";
rv.LocalReport.ReportPath = "Report.rdlc";
rds.Value = SomeReportObject;
rv.LocalReport.DataSources.Add(rds);
rv.LocalReport.Refresh();
ScriptManager scriptHandler = new ScriptManager();
MyPage p = new MyPage();
p.Controls.Add(scriptHandler);
p.Controls.Add(rv);
using (TextWriter myTextWriter = new StringWriter())
{
using (HtmlTextWriter myWriter = new HtmlTextWriter(myTextWriter))
{
p.RenderControl(myWriter);
}
}
Run Code Online (Sandbox Code Playgroud)
虽然我已将ScriptManager添加到页面但运行时抱怨ReportViewer需要一个,但它会在p.RenderControl(myWriter)行引发以下异常
报表查看器Web控件需要Web表单上的System.Web.UI.ScriptManager.
这是MyPage类
public class MyPage : Page
{
public override void VerifyRenderingInServerForm(Control control)
{
//Empty Method
}
public override bool EnableEventValidation
{
get { return false; }
set …Run Code Online (Sandbox Code Playgroud) 按照此SO解决方案在此处通知客户PDF文档中的单击事件,如何在客户端使用this.myPDF.submitForm("localhost/Handler.ashx?r = 2"提交PDF时通知客户端)功能?
PDF文件在用户控件内创建,然后呈现为HTML对象:
string container = ("<object data='/myfile.pdf' type='application/pdf'></object>");
Run Code Online (Sandbox Code Playgroud)
附加到PDF的JS文件是这样完成的:
var webClient = new WebClient();
string htmlContent = webClient.DownloadString(fileurl + "pdf_script.js");
PdfAction action = PdfAction.JavaScript(htmlContnent, pdfstamper.Writer);
pdfstamper.Writer.SetOpenAction(action);
Run Code Online (Sandbox Code Playgroud)
和js文件的内容:
this.disclosed = true;
if (this.external && this.hostContainer) {
function onMessageFunc(stringArray) {
try {
this.myPDF.submitForm("http://localhost/Handler.ashx?EmpNo=12345" + "#FDF", false);
}
catch (e) {
}
}
function onErrorFunc(e) {
console.show();
console.println(e.toString());
}
try {
if (!this.hostContainer.messageHandler);
this.hostContainer.messageHandler = new Object();
this.hostContainer.messageHandler.myPDF = this;
this.hostContainer.messageHandler.onMessage = onMessageFunc;
this.hostContainer.messageHandler.onError = onErrorFunc;
this.hostContainer.messageHandler.onDisclose = function …Run Code Online (Sandbox Code Playgroud) 我在global.asax的Application_Error方法中有一个自定义错误处理程序,当发生错误时我使用以下代码将用户转移到错误页面:
Server.Transfer("/Error/");
Run Code Online (Sandbox Code Playgroud)
但是,如果没有指定实际的页面名称,则上面的代码会出现" 执行/ Error /的子请求错误 "异常.
因此,如果我使用Server.Transfer("/Error/Default.aspx")它工作正常没有问题.
同样使用也可以Response.Redirect("/Error/")正常工作,但是我们希望继续使用Server.Transfer在显示错误页面时保留地址栏中显示的URL,这样用户只需刷新页面即可重试访问原始违规URL.
如果有人可以评论如何使Server.Transfer方法工作而不指定实际的aspx页面名称,将不胜感激.
非常感谢.
我有一个JQuery的.each循环,每次迭代调用一个参数的函数,有没有办法延迟这个函数调用?我已尝试过setTimeout,如下所示,但这不起作用,因为函数立即执行.
$.each(myArray, function (j, dataitem)
{
setTimeout(function () { showDetails(dataitem) }, 300);
});
function showDetails(dataitem)
{
...
}
Run Code Online (Sandbox Code Playgroud)
数组大小大约是20,我要做的是在一定的时间范围内分配函数调用而不是立即,任何想法如何实现这一点?我准备重写并重新调整函数的调用方式以完成这项任务,任何帮助都将受到赞赏.
javascript jquery javascript-events settimeout delayed-execution
我已将INotifyPropertyChanged实现到以下类
public class FactoryItems : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
string symbol;
public string Symbol
{
get { return symbol; }
set { symbol = value; OnPropertyChanged("Symbol"); }
}
public FactoryItems()
{
}
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
}
Run Code Online (Sandbox Code Playgroud)
当Symbol属性更改时,事件触发没有问题,但PropertyChanged事件始终为null,此类仅实例化一次,我在构造函数上放置了一个断点以确保它的大小写.
在另一个类中,这是我订阅它的方式:
Data.Tables.FactoryItems = new Data.FactoryItems();
Data.Tables.FactoryItems.PropertyChanged +=
new System.ComponentModel.PropertyChangedEventHandler(FactoryItems_SymbolChanged);
void FactoryItems_SymbolChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
doSomething();
}
Run Code Online (Sandbox Code Playgroud)
但是,当PropertyChanged为null时,处理程序始终为null.知道如何让这个工作吗?
非常感谢.
我刚刚发布了这个问题但得到了我的问题的部分答案,所以我想我发布了更多解释,希望得到更准确的答案.我有2个班:
public class Employee
{
public string Name { get; set; }
public List<Cars> Cars { get; set; }
}
public class Car
{
public int CarID { get; set; }
public CarTypes CarType { get; set; }
public enum CarTypes
{
Van,
SmallCar
}
}
Run Code Online (Sandbox Code Playgroud)
我试图只获得所有已经分配了使用Lambda忽略那些使用SmallCars的员工的员工,我尝试了这一行:
List<Employee> EmployeesWithVans = AllEmployees.Where(emps => emps.Car.Any(cartype => cartype.CarType == Car.CarTypes.Van)).ToList();
Run Code Online (Sandbox Code Playgroud)
但是,如果至少有一辆面包车被分配给一个员工(.Any),如果我尝试(.All)它会带回任何东西,因为并非所有员工都有范.
是否可以使用嵌套的Lambda实现这一点?
谢谢.
编辑:
Employee Mark = new Employee();
Mark.Cars.Add(new Car() { CarType = Car.CarTypes.Van, CarID = 12 }); …Run Code Online (Sandbox Code Playgroud) 我有一个Web URL,该URL可应要求返回JSON格式的字符串
{"StockID":0,"LastTradePriceOnly":"494.92","ChangePercent":"0.48"}
Run Code Online (Sandbox Code Playgroud)
我正在使用Java流式传输
InputStream in = null;
in = url.openStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuilder sb = new StringBuilder();
String line = null;
try {
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
}
catch (IOException e) {
e.printStackTrace();
} finally {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
String result = sb.toString();
Run Code Online (Sandbox Code Playgroud)
但reader.readLine()总是回来null
知道我在做什么错吗?
这是实际的JSON地址http://app.myallies.com/api/quote/goog
更新
尽管两个链接具有相同的服务器实现以生成JSON响应,但相同的代码在http://app.myallies.com/api/news上可以正常工作。
我有一个自定义对象列表:
List<SomeObject> someobjects = getAllSomeObjects();
List<SomeObject> someobjectsfiltered = new List<SomeObject>();
class SomeObject
{
List <AnotherList>
}
class AnotherList
{
public string Name{get;set;}
public Categories category {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
所以我试图使用Lambda获取特定类型的All AnotherList项
someobjectsfiltered = someobjects.SelectMany(s => s.AnotherList.FindAll(a => a.category == SomeCategory));
Run Code Online (Sandbox Code Playgroud)
但我得到了
无法将IEnumerable类型隐式转换为Generic.List
错误
不知道怎么解决这个问题?
非常感谢.
如何从C#中的时间跨度对象中截断秒位?即15:37
我正在以HH:mm的格式向JavaScript输出一个timepan对象,并希望服务器端处理提供正确的格式而不是客户端浏览器,这可以在不将其作为C#字符串对象提供给JavaScript的情况下完成吗?
我正在使用JSON.NET实现将.NET对象序列化/反序列化为JS,反之亦然,所有工作正常,直到GetWCFData()在以下运行:
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
public class WebLookup
{
WCFService.WCFServiceClient svc;
IsoDateTimeConverter DateConverter = new IsoDateTimeConverter();
List<WCFContract.Language> Languages { get; set; }
List<WCFContract.Group> Groups { get; set; }
List<WCFContract.User> Users { get; set; }
public WebLookup()
{
DateConverter.DateTimeFormat = "dd/MM/yyyy";
DateConverter.DateTimeStyles = System.Globalization.DateTimeStyles.AssumeLocal;
}
public string GetWCFData()
{
svc = new WCFService.WCFServiceClient();
WebLookup weblookup = new WebLookup();
weblookup.Languages = svc.GetWCFLanguages().ToList();
weblookup.Groups = svc.GetWCFGroups().ToList();
weblookup.Users = svc.GetWCFUsers().ToList();
return JsonConvert.SerializeObject(weblookup, DateConverter);
}
}
Run Code Online (Sandbox Code Playgroud)
成员Languages,Groups并且 …
什么是返回C#4.0中最小/最大数组计数的最佳方法?最好使用Lambda表达式.
我正在寻找一种方法来返回通常包含5-10个元素的数组列表中最小数组的计数.我可以选择通常的foreach数组> get count>如果更大>覆盖>下一步......等等,但希望使用LINQ/Lambda的单行解决方案.
c# ×8
.net-4.0 ×4
.net ×3
javascript ×3
lambda ×3
arrays ×2
json ×2
linq ×2
acrofields ×1
adobe ×1
ajax ×1
android ×1
arraylist ×1
asp.net ×1
datetime ×1
delegates ×1
events ×1
global-asax ×1
itextsharp ×1
java ×1
jquery ×1
json.net ×1
nested-class ×1
pdf ×1
reportviewer ×1
settimeout ×1
timespan ×1
vue-router ×1
vue.js ×1
vuejs2 ×1
wcf ×1