我们有一个现有的Angular 8项目,其中包含许多常用组件(例如custom datepickers, numeric inputs, ...)。该项目本身是一个标准的Angular应用程序。
我们希望将其中一些组件提取为Angular元素,以便可以在其他Angular应用程序甚至与Angular不相关的其他项目中使用。
是否可以通过仅在生成的JavaScript文件中包含特定于单个Angular元素的代码的方式构建项目?
我需要的是这样的:
ng build --element myDatePicker
这应该myDatePicker-Element只为所有具有所有所需依赖项的项目生成所有JavaScript文件,而无需从项目中获取任何其他代码(如other components, modules, ...)。
使用时,整个应用仍应正常构建ng build。
我确实想创建一个实现类似通知服务的插件.
所以我现在正在做的是这样的:
var activity = Mvx.Resolve<IMvxAndroidCurrentTopActivity>().Activity;
var builder = new NotificationCompat.Builder(activity.ApplicationContext)
.SetContentTitle(title)
.SetSmallIcon(Resource.Drawable.Icon)
.SetContentText(message);
var notificationManager = (NotificationManager)activity.ApplicationContext.GetSystemService(Context.NotificationService);
notificationManager.Notify(0, builder.Build());
Run Code Online (Sandbox Code Playgroud)
这工作正常,并显示应显示的通知.下一步是,我想从通知导航到我的活动.这意味着在MvvmCross中我确实希望导航到我的ViewModel.
但是,我现在如何将ShowViewModel <...>() - 命令打包到此通知中?这甚至可能吗?
在原生android上我会创建一个PendingIntent,它确实指向我要显示的Activity.
任何的想法?暗示?小费?:-)
我想要做的是在网格中显示多个项目的简单屏幕.这可以在Android上使用GridView轻松存档.
在MvvmCross中,我想我必须使用MvxGridView来存档相同的内容.
这是我的axml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Mvx.MvxGridView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
local:MvxBind="ItemsSource Items"
local:MvxItemTemplate="@layout/itemview" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
itemview:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:minWidth="25px"
android:minHeight="25px">
<TextView
android:text="Text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/textView1"
local:MvxBind="Text Name" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
我的ViewModel:
using System.Collections.ObjectModel;
using Cirrious.MvvmCross.ViewModels;
namespace GridViewBug.Core.ViewModels
{
public class FirstViewModel
: MvxViewModel
{
public FirstViewModel()
{
Items = new ObservableCollection<TestClass>();
Items.Add(new TestClass { Name = "Test1" });
Items.Add(new TestClass { Name = "Test2" });
}
private string _hello …Run Code Online (Sandbox Code Playgroud) 我确实有一个 HLS 直播,它由指向清单文件的 URI 表示。清单文件还额外定义了字幕。
使用 ExoPlayer 时,我可以使用 TrackSelector,将其附加到 ExoPlayer,这样我就可以选择向用户显示可用的字幕(并通过 TrackSelector 进行更改)。
我想只用 CastPlayer 做同样的事情。这是我能想象的最简单的活动:
public class PlayerActivity extends AppCompatActivity implements SessionAvailabilityListener {
private MediaRouteButton castButton;
private CastPlayer castPlayer;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.player_activity);
castButton = findViewById(R.id.castButton);
CastButtonFactory.setUpMediaRouteButton(this, castButton);
CastContext castContext = CastContext.getSharedInstance(this);
castPlayer = new CastPlayer(castContext);
castPlayer.setSessionAvailabilityListener(this);
}
@Override
public void onCastSessionAvailable() {
MediaMetadata movieMetadata = new MediaMetadata(MediaMetadata.MEDIA_TYPE_MOVIE);
MediaInfo mediaInfo = new MediaInfo.Builder("https://myuri.ch/video.m3u8")
.setStreamType(MediaInfo.STREAM_TYPE_BUFFERED)
.setMetadata(movieMetadata)
.build();
MediaQueueItem mediaItem = new MediaQueueItem.Builder(mediaInfo).build();
castPlayer.loadItems(new MediaQueueItem[]{mediaItem}, 0, 0, Player.REPEAT_MODE_OFF); …Run Code Online (Sandbox Code Playgroud) 我确实想创建一个不包含任何输入的自定义控件。每当控件更改时,我都希望保存完整的表单。
我们当前的方法使用如下形式的事件更改:
<form #demoForm="ngForm" (change)="onChange()">
<custom-input name="someValue" [(ngModel)]="dataModel">
</custom-input>
</form>
Run Code Online (Sandbox Code Playgroud)
如您所见,我们使用“ change”事件来响应表单中的任何更改。只要我们具有输入,复选框,...作为控件,此方法就可以正常工作。
但是我们的自定义控件仅存在于我们可以单击的简单div之外。每当我单击div时,控件的值都会增加1。但是不会触发表单的“更改”事件。我是否必须以某种方式将我的自定义控件链接到表单?还是有需要触发的事件?
import { Component, forwardRef } from '@angular/core';
import { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';
@Component({
selector: 'custom-input',
template: `<div (click)="update()">Click</div>`,
providers: [{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => CustomInputComponent),
multi: true
}]
})
export class CustomInputComponent implements ControlValueAccessor {
private onTouchedCallback: () => void = () => {};
private onChangeCallback: (_: any) => void = () => {};
update(){
this.value++;
}
get value(): any {
return this.innerValue;
}; …Run Code Online (Sandbox Code Playgroud) android ×2
angular ×2
mvvmcross ×2
angular-cli ×1
c# ×1
chromecast ×1
exoplayer ×1
forms ×1
javascript ×1
mono ×1