小编May*_*aya的帖子

在Vue js中更改参数化的子组件时如何防止父组件重新加载

我有一个页面,其中将包含证券(子组件)列表的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)

vue.js vue-router vue-component vuejs2

13
推荐指数
1
解决办法
964
查看次数

Microsoft ReportViewer Web控件需要ScriptManager

我正在尝试以编程方式在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)

c# ajax reportviewer .net-4.0 visual-studio-2010

12
推荐指数
1
解决办法
4万
查看次数

PDF hostContainer回调

按照此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)

javascript pdf adobe itextsharp acrofields

10
推荐指数
1
解决办法
7291
查看次数

Global.asax中的Server.Transfer

我在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页面名称,将不胜感激.

非常感谢.

.net c# asp.net server.transfer global-asax

9
推荐指数
1
解决办法
4990
查看次数

延迟JavaScript的函数执行

我有一个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

8
推荐指数
1
解决办法
6050
查看次数

INotifyPropertyChanged PropertyChangedEventHandler事件始终为null

我已将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.知道如何让这个工作吗?

非常感谢.

c# events delegates .net-4.0 inotifypropertychanged

6
推荐指数
1
解决办法
1万
查看次数

具有嵌套类的Lambda

我刚刚发布了这个问题但得到了我的问题的部分答案,所以我想我发布了更多解释,希望得到更准确的答案.我有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)

c# linq lambda .net-4.0 nested-class

6
推荐指数
1
解决办法
3353
查看次数

URL的JSON序列化总是返回NULL

我有一个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上可以正常工作。

java serialization android json deserialization

5
推荐指数
1
解决办法
549
查看次数

Lambda用于嵌套数组

我有一个自定义对象列表:

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

错误

不知道怎么解决这个问题?

非常感谢.

.net c# arrays lambda .net-4.0

4
推荐指数
1
解决办法
1697
查看次数

TimeSpan删除秒

如何从C#中的时间跨度对象中截断秒位?即15:37

我正在以HH:mm的格式向JavaScript输出一个timepan对象,并希望服务器端处理提供正确的格式而不是客户端浏览器,这可以在不将其作为C#字符串对象提供给JavaScript的情况下完成吗?

.net javascript c# datetime timespan

2
推荐指数
2
解决办法
1万
查看次数

使用JSON.NET序列化公共属性

我正在使用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# wcf serialization json json.net

2
推荐指数
1
解决办法
3618
查看次数

多个数组计数比较C#

什么是返回C#4.0中最小/最大数组计数的最佳方法?最好使用Lambda表达式.

我正在寻找一种方法来返回通常包含5-10个元素的数组列表中最小数组的计数.我可以选择通常的foreach数组> get count>如果更大>覆盖>下一步......等等,但希望使用LINQ/Lambda的单行解决方案.

c# linq arrays lambda arraylist

1
推荐指数
1
解决办法
251
查看次数