错误:无法匹配任何路线:'播放器配置文件;用户ID = 2'

时间:2016-08-16 16:25:11

标签: angular

我有以下模板表达式:

using System;
using Foundation;
using UIKit;
using System.CodeDom.Compiler;
using MessageUI;
using Microsoft.Office365.OutlookServices;
using FiveMinuteMeeting.Shared.ViewModels;
using CoreGraphics;
using FiveMinuteMeeting.Shared;


namespace FiveMinuteMeeting.iOS
{
  partial class ContactDetailViewController : UIViewController
  {
    public ContactDetailViewController(IntPtr handle)
  : base(handle)
{

}

public DetailsViewModel ViewModel
{
  get;
  set;
}


UIBarButtonItem save;
public override void ViewDidLoad()
{
   base.ViewDidLoad();

   NavigationController.NavigationBar.BarStyle = UIBarStyle.Black;

   save = new UIBarButtonItem(UIBarButtonSystemItem.Save,
    async (sender, args) =>
   {
     ViewModel.FirstName = TextFirst.Text.Trim();
     ViewModel.LastName = TextLast.Text.Trim();
     ViewModel.Email = TextEmail.Text.Trim();
     ViewModel.Phone = TextPhone.Text.Trim();
     //BigTed.BTProgressHUD.Show("Saving contact...");
     await ViewModel.SaveContact();
     //BigTed.BTProgressHUD.Dismiss();
     NavigationController.PopToRootViewController(true);
   });


   TextEmail.ShouldReturn += ShouldReturn;
   TextFirst.ShouldReturn += ShouldReturn;
   TextPhone.ShouldReturn += ShouldReturn;
   TextLast.ShouldReturn += ShouldReturn;

   TextEmail.ValueChanged += (sender, args) =>
     {
       ImagePhoto.SetImage(
      url: new NSUrl(Gravatar.GetURL(TextEmail.Text, 172)),
      placeholder: UIImage.FromBundle("missing.png")
      );
     };

   var color = new CGColor(17.0F / 255.0F, 113.0F / 255.0F, 197.0F / 255F);
   TextEmail.Layer.BorderColor = color;
   TextFirst.Layer.BorderColor = color;
   TextPhone.Layer.BorderColor = color;
   TextLast.Layer.BorderColor = color;


   ButtonCall.Clicked += (sender, args) => PlaceCall();

   NSNotificationCenter.DefaultCenter.AddObserver
    (UIKeyboard.DidShowNotification, KeyBoardUpNotification);

   // Keyboard Down
   NSNotificationCenter.DefaultCenter.AddObserver
   (UIKeyboard.WillHideNotification, KeyBoardDownNotification);

   double min = Math.Min((float)ImagePhoto.Frame.Width, (float)ImagePhoto.Frame.Height);
   ImagePhoto.Layer.CornerRadius = (float)(min / 2.0);
   ImagePhoto.Layer.MasksToBounds = false;
   ImagePhoto.Layer.BorderColor = new CGColor(1, 1, 1);
   ImagePhoto.Layer.BorderWidth = 3;
   ImagePhoto.ClipsToBounds = true;
}

public override void ViewWillAppear(bool animated)
{
  base.ViewWillAppear(animated);
  if (ViewModel == null)
  {
    ViewModel = new DetailsViewModel();
    NavigationItem.RightBarButtonItem = save;
  }
  else
  {
    this.Title = ViewModel.FirstName;
    TextEmail.Text = ViewModel.Email;
    TextFirst.Text = ViewModel.FirstName;
    TextLast.Text = ViewModel.LastName;
    TextPhone.Text = ViewModel.Phone;

    ImagePhoto.SetImage(
        url: new NSUrl(Gravatar.GetURL(ViewModel.Contact.EmailAddresses[0].Address, 172)),
        placeholder: UIImage.FromBundle("missing.png")
    );


    NavigationItem.RightBarButtonItem = null;
  }
}

private bool ShouldReturn(UITextField field)
{
  field.ResignFirstResponder();
  return true;
}

private void PlaceCall()
{
  var alertPrompt = new UIAlertView("Dial Number?",
      "Do you want to call " + TextPhone.Text + "?",
      null, "No", "Yes");

  alertPrompt.Dismissed += (sender, e) =>
  {
    if ((int)e.ButtonIndex >= (int)alertPrompt.FirstOtherButtonIndex)
    {

      var url = new NSUrl("tel:" + TextPhone.Text);
      if (!UIApplication.SharedApplication.OpenUrl(url))
      {
        var av = new UIAlertView("Not supported",
          "Scheme 'tel:' is not supported on this device",
          null,
          "OK",
          null);
        av.Show();
      }
      else
      {
        UIApplication.SharedApplication.OpenUrl(url);
      }
    }
  };

  alertPrompt.Show();
}


/*private async void SendEmail()
{
  var mailController = new MFMailComposeViewController();

  mailController.SetToRecipients(new string[] { TextEmail.Text });
  mailController.SetSubject("5 Minute Meeting");
  mailController.SetMessageBody("We are having a 5 minute stand up tomorrow at this time! Check your calendar.", false);

  mailController.Finished += (object s, MFComposeResultEventArgs args) =>
  {
    Console.WriteLine(args.Result.ToString());
    args.Controller.DismissViewController(true, (Action)null);
  };

  PresentViewControllerAsync(mailController, true);

}*/

public override void PrepareForSegue(UIStoryboardSegue segue, NSObject sender)
{
  switch(segue.Identifier)
  {
    case "email":
      {
        var vc = segue.DestinationViewController as SendEmailViewController;
        vc.ViewModel.FirstName = ViewModel.FirstName;
        vc.ViewModel.LastName = ViewModel.LastName;
        vc.ViewModel.Email = ViewModel.Email;
      }
      break;
    case "meeting":
      {
        var vc = segue.DestinationViewController as NewEventDurationViewController;
        vc.ViewModel.FirstName = ViewModel.FirstName;
        vc.ViewModel.LastName = ViewModel.LastName;
        vc.ViewModel.Email = ViewModel.Email;
      }
      break;
  }

}




#region Keyboard

private UIView activeview;             // Controller that activated the keyboard
private float scrollamount;    // amount to scroll 
private float bottom;           // bottom point
private const float Offset = 68.0f; // extra offset
private bool moveViewUp;           // which direction are we moving


private void KeyBoardDownNotification(NSNotification notification)
{
  if (moveViewUp) { ScrollTheView(false); }
}

private void ScrollTheView(bool move)
{

  // scroll the view up or down
  UIView.BeginAnimations(string.Empty, System.IntPtr.Zero);
  UIView.SetAnimationDuration(0.3);

  CGRect frame = (CGRect)View.Frame;

  if (move)
  {
    frame.Y -= scrollamount;
  }
  else
  {
    frame.Y += scrollamount;
    scrollamount = 0;
  }

  View.Frame = frame;
  UIView.CommitAnimations();
}

private void KeyBoardUpNotification(NSNotification notification)
{
  // get the keyboard size
  var r = (CGRect)UIKeyboard.FrameBeginFromNotification((NSNotification)notification);


  // Find what opened the keyboard
  foreach (UIView view in this.View.Subviews)
  {
    if (view.IsFirstResponder)
      activeview = view;
  }

  // Bottom of the controller = initial position + height + offset      
  bottom = ((float)activeview.Frame.Y + (float)activeview.Frame.Height + Offset);

  // Calculate how far we need to scroll
  scrollamount = ((float)r.Height - ((float)View.Frame.Size.Height - bottom));

  // Perform the scrolling
  if (scrollamount > 0)
  {
    moveViewUp = true;
    ScrollTheView(moveViewUp);
  }
  else
  {
    moveViewUp = false;
  }

}
#endregion

}
}

app.routing.ts中的以下定义:

 [routerLink]="['player-profile',{userID:activity.user.id}]" 

为什么单击routerLink会返回以下错误:

{path:'player-profile/:userID', component: PlayerProfileComponent},

Angular 2 RC.5 +新路由器

1 个答案:

答案 0 :(得分:1)

仅使用

[routerLink]="['player-profile', activity.user.id]"

该对象用于查询参数。对于路线参数,位置很重要。无需传递名称。