小编pro*_*ade的帖子

Angular Material 2 DataTable使用嵌套对象进行排序

我有一个带有排序标题的普通Angular Material 2 DataTable.所有排序都是标题工作正常.除了具有对象作为值的那个.这些根本不排序.

例如:

 <!-- Project Column - This should sort!-->
    <ng-container matColumnDef="project.name">
      <mat-header-cell *matHeaderCellDef mat-sort-header> Project Name </mat-header-cell>
      <mat-cell *matCellDef="let element"> {{element.project.name}} </mat-cell>
    </ng-container>
Run Code Online (Sandbox Code Playgroud)

请注意 element.project.name

这是displayColumn配置:

 displayedColumns = ['project.name', 'position', 'name', 'test', 'symbol'];
Run Code Online (Sandbox Code Playgroud)

更改'project.name''project'不工作,也不"project['name']"

我错过了什么?这甚至可能吗?

这是Stackblitz: Angular Material2 DataTable排序对象

编辑: 谢谢你的所有答案.我已经使用动态数据了.所以我不必为每个新的嵌套属性添加switch语句.

这是我的解决方案:(创建一个扩展MatTableDataSource的新DataSource不是必需的)

export class NestedObjectsDataSource extends MatTableDataSource<MyObjectType> {

  sortingDataAccessor: ((data: WorkingHours, sortHeaderId: string) => string | number) =
    (data: WorkingHours, sortHeaderId: string): string | number => {
      let value = null;
      if …
Run Code Online (Sandbox Code Playgroud)

angular-material2 angular

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

Android Studio中的Gradle错误

我从Eclipse导入了一个Android项目到Andriod Studio,但是当我编译时,我得到了这些错误.他们的意思是什么?

Gradle: : org.gradle.api.plugins.PluginInstantiationException: Could not create plugin of type 'AppPlugin'.
Gradle: : java.lang.NoClassDefFoundError: org/gradle/tooling/provider/model/ToolingModelBuilderRegistry
Gradle: : java.lang.ClassNotFoundException: org.gradle.tooling.provider.model.ToolingModelBuilderRegistry
Run Code Online (Sandbox Code Playgroud)

我不认为它与我的代码有任何关系,因为它在Eclipse中都有效.另一方面,我在Android Studio中创建了其他项目来运行.导出或导入项目时我做错了什么?

android gradle android-studio

10
推荐指数
2
解决办法
8502
查看次数

我可以在Android中对ProgressBar进行数据绑定吗?

是否可以在Android中对SeekBar或ProgressBar使用数据绑定?我有这个数据元素:

<data>
  <variable
     name="foo"
     type="com.example.Foo" />
</data>
Run Code Online (Sandbox Code Playgroud)

如果我在TextField中引用变量foo.bar(它是一个int),它按预期工作:

<TextView
  android:text="@{String.valueOf(foo.bar)}"
  [...]
Run Code Online (Sandbox Code Playgroud)

我试图做的是这样的:

<SeekBar
  android:progress="@{foo.bar}"
  [...]
Run Code Online (Sandbox Code Playgroud)

但它没有得到承认.(只要我在引号之间写了一个"@",它就会在编辑器中变成红色).还有另一种数据绑定方式吗?

data-binding android android-seekbar

10
推荐指数
3
解决办法
7856
查看次数

Angular 2:默认选中ngFor中的复选框

我正试图在我的ngFor内的复选框上设置默认值.这是我的复选框项目数组:

tags = [{
  name: 'Empathetic',
  checked: false
}, {
  name: 'Smart money',
  checked: true
}, {
  name: 'Minimal help after writing check',
  checked: false
}, {
  name: 'Easy term sheet',
  checked: true
}];
Run Code Online (Sandbox Code Playgroud)

这是我的HTML

<div class="form-group">
  <div class="form-check" *ngFor="let tag of tags;">
    <label class="form-check-label" for="tag{{tag.value}}">
      <input
        class="form-check-input"
        type="checkbox"
        id="tag{{tag.value}}"
        name="tagOptions"
        [(ngModel)]="tag.checked">
      {{tag.name}}
    </label>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

所需的结果是获得2个选中,2个未选中的框,但所有这些框都未选中.我也尝试了[checked] ="tag.checked"的不同变体,但它似乎没有做到这一点.

checkbox typescript angular2-ngmodel ngfor angular

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

不使用Marshmallow调用Spinner onItemSelected

我的应用程序中有一个微调器,我实现如下:

   //Setup spinner
    spinner = (AppCompatSpinner) findViewById(R.id.toolbar_spinner);
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.sections, R.layout.spinner_item);
    adapter.setDropDownViewResource(R.layout.spinner_list_item);
    spinner.setAdapter(adapter);
    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            mViewPager.setCurrentItem(position);
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {
            mViewPager.setCurrentItem(0);
        }
    });
Run Code Online (Sandbox Code Playgroud)

这适用于我的手机运行API级别19(4.4.2),但在Marshmallow,API级别23(6.0)上运行,从不调用onItemSelected.

我已尝试使用android.widget.Spinnerandroid.support.v7.widget.AppCompatSpinner同样的结果.

知道为什么吗?

android android-spinner android-toolbar

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

如何在执行下一行之前等待执行完成

标题说明了一切.我找到了一些答案(关于回调等等),但我不知道如何将它应用到我的代码中.

问题:如何$( "#layout-grid" ).load(layout);在执行下一行之前等待完成?

最后一行的警报不会在第一次执行时显示,因为$( "#layout-grid" ).load(layout);尚未完成加载.但是,警报会在第二次执行时正确显示.

function setLayout(selectedLayout) {
    layout += selectedLayout;
    $( "#layout-grid" ).load(layout); // this load is not finished yet before alert
    var top_level_div = document.getElementById('layout');
    var count = top_level_div.getElementsByTagName('div').length;
    alert(count);
}
Run Code Online (Sandbox Code Playgroud)

javascript jquery

3
推荐指数
2
解决办法
1918
查看次数