GVKun编程网logo

AngularJS和contentEditable两种方式的绑定无法正常工作(angularjs数据绑定)

11

在本文中,我们将给您介绍关于AngularJS和contentEditable两种方式的绑定无法正常工作的详细内容,并且为您解答angularjs数据绑定的相关问题,此外,我们还将为您提供关于andr

在本文中,我们将给您介绍关于AngularJS和contentEditable两种方式的绑定无法正常工作的详细内容,并且为您解答angularjs数据绑定的相关问题,此外,我们还将为您提供关于android – Gradient XML drawable center无法正常工作、Android支持Cardview contentPadding无法正常工作、angular 1.2.5 contenteditable 指令、Angular 2与contentEditable div和ngModel支持形成的知识。

本文目录一览:

AngularJS和contentEditable两种方式的绑定无法正常工作(angularjs数据绑定)

AngularJS和contentEditable两种方式的绑定无法正常工作(angularjs数据绑定)

在下面的示例中,为什么初始呈现值{{ person.name }}不是David?您将如何解决?

这里的例子

HTML:

<body ng-controller="MyCtrl">  <div contenteditable="true" ng-model="person.name">{{ person.name }}</div>  <pre ng-bind="person.name"></pre></body>

JS:

app.controller(''MyCtrl'', function($scope) {  $scope.person = {name: ''David''};});app.directive(''contenteditable'', function() {  return {    require: ''ngModel'',    link: function(scope, element, attrs, ctrl) {      // view -> model      element.bind(''blur'', function() {        scope.$apply(function() {          ctrl.$setViewValue(element.html());        });      });      // model -> view      ctrl.$render = function() {        element.html(ctrl.$viewValue);      };      // load init value from DOM      ctrl.$setViewValue(element.html());    }  };});

答案1

小编典典

问题是当插值尚未完成时,您正在更新视图值。

所以删除

// load init value from DOMctrl.$setViewValue(element.html());

或替换为

ctrl.$render();

将解决问题。

android – Gradient XML drawable center无法正常工作

android – Gradient XML drawable center无法正常工作

我正在尝试创建一个XML渐变drawable来匹配Material Design guidelines中提到的这种风格

Gradient guideline

这是我的XML代码:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <gradient
        android:angle="270"
        android:centerY="30%"
        android:endColor="@android:color/transparent"
        android:startColor="#4d000000"
        android:type="linear"/>
</shape>

我已经尝试将centerY设置为0.3,但没有成功. drawable在预览中总是看起来一样.

有人能告诉我该怎样做才能达到那种风格吗?提前致谢.

解决方法:

我不太明白你的错误.您可能首先必须设置centerColor.如果您还没有,请查看文档:

https://developer.android.com/reference/android/graphics/drawable/GradientDrawable.html

但是在使用XML drawable进行繁殖之前会给你一个线性渐变,我建议你使用Roman Nuriks尝试这个问题.在这里查看更多:
https://plus.google.com/+RomanNurik/posts/2QvHVFWrHZf
他通过使用Drawable的Java实现解决了这个问题.像任何其他drawable一样工作.

Android支持Cardview contentPadding无法正常工作

Android支持Cardview contentPadding无法正常工作

我想在我的支持cardview中添加一个contentPadding.此填充是在4.4设备上正确计算的,但在4.1.2设备上,内容缓冲区不起作用.

的build.gradle:

dependencies {
    compile filetree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.3'
    compile 'com.android.support:cardview-v7:21.0.3'
}

XML布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:tools="http://schemas.android.com/tools"
            xmlns:card_view="http://schemas.android.com/apk/res-auto"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            tools:context=".MainActivity">

<android.support.v7.widget.CardView
    android:id="@+id/card"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    card_view:cardCornerRadius="4dp"
    card_view:contentPaddingLeft="32dp"
    card_view:contentPaddingRight="32dp"
    card_view:contentPaddingTop="32dp"
    card_view:contentPaddingBottom="32dp">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_launcher"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="This is a very long text with more blablablablablablablablabla bla bla bla blablablablabla bla blablablablablabla blablablablabla blablablablabla blablabla"/>

    </LinearLayout>

</android.support.v7.widget.CardView>

</RelativeLayout>

设备运行4.1.2的结果:

contentPadding无法识别.

运行4.4.2设备的相同应用:

contentPadding被正确识别.

我在这个帖子上找到了解决这个问题的方法:How to set the padding for CardView widget in Android L
但我想知道,如果其他人正面临这个问题或者能提供更好的解决方案吗?

编辑:
目前,它似乎只是运行Android 4.1.2的Sony XPERIA L设备上的一个错误.我测试了运行4.1.2的galaxy Nexus,在这种情况下,一切看起来都不错.

解决方法:

使用setUseCompatPadding(true)或XML参数app:cardUseCompatPadding =“true”

angular 1.2.5 contenteditable 指令

angular 1.2.5 contenteditable 指令

<table><tr>
<td><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

contenteditable         contenteditable$sce         directive             restrict             require             link link                   directive           linkscope element attrs ngModel             ngModel nothing if no ng-model                           ngModel.$render                 element.$sce.ngModel.$viewValue                                       element.                 scope.$applyread                         read                           read                 html element.                 browser leaves a
behind                                 attrs. html '                     html                                 ngModel.$setViewValuehtml                        

总结

以上是小编为你收集整理的angular 1.2.5 contenteditable 指令全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

Angular 2与contentEditable div和ngModel支持形成

Angular 2与contentEditable div和ngModel支持形成

我正在尝试使用Angular 2 Forms,但我不想使用输入,而是想使用可编辑的div.

这有效:

<input type="text" [(ngModel)]="value">

但这会引发错误:

<div contentEditable="true" [(ngModel)]="value"></div>

TypeError: setting a property that has only a getter

有没有办法在Angular Forms中使用div?我不想使用输入或textarea

不是开箱即用..

ngModel只能在支持它的元素上访问!

您可以创建指令或自定义输入组件.

无论如何,它必须实现此接口ControlValueAccessor.

指示:

工作演示:https://plnkr.co/edit/12vAEFf2OBS3ERu9fhwk?p=preview

import {Directive,Component,NgModule,forwardRef,ViewChild,ElementRef,HostListener,Renderer} from '@angular/core'
import {browserModule} from '@angular/platform-browser'
import { FormsModule,ControlValueAccessor,NG_VALUE_ACCESSOR } from '@angular/forms';

@Directive({
  selector: 'div[contentEditable]',providers: [
    {
      provide: NG_VALUE_ACCESSOR,useExisting: forwardRef(() => EditableDivDirective),multi: true
    }
  ]
})
export class EditableDivDirective implements ControlValueAccessor {

  constructor(private _elRef: ElementRef,private _renderer: Renderer) { }

  onChange() {
    if (this._onChange) {
      this._onChange(this._elRef.nativeElement.innerText);
    }
  }

  @HostListener('keyup',['$event'])
  keyup(event: any) {
    this.onChange();
  }


  // ControlValueAccessor implementation
  // ====================================

  private _onChange = (_) => { }; // call it if your value changed..
  private _onTouched = () => { }; // call it "on blur" ..

  // will be called if a values comes in via ngModule !
  writeValue(val: any) {
    if (!val) val = '';

    this._renderer.setElementProperty(this._elRef.nativeElement,'innerText',val);
  }

  registerOnChange(fn: (_: any) => void): void { this._onChange = fn; }
  registerOnTouched(fn: () => void): void { this._onTouched = fn; }
}

@Component({
  selector: 'my-app',template: `
    <div>
      <h2>Hello {{name}}</h2>
      <div contentEditable="true" [(ngModel)]="name">test test test</div>
    </div>
  `,})
export class App {
  name:string;
  constructor() {
    this.name = 'Angular2'
  }
}

@NgModule({
  imports: [ browserModule,FormsModule ],declarations: [ App,EditableDivDirective ],bootstrap: [ App ]
})
export class AppModule {}

零件:

查看工作演示:https://plnkr.co/edit/XMSTrWSe3gN9iwVTBukz?p=preview

import {Component,ElementRef} from '@angular/core'
import {browserModule} from '@angular/platform-browser'
import { FormsModule,NG_VALUE_ACCESSOR } from '@angular/forms';

@Component({
  selector: 'my-name-input',template: `
    <div>
      <label>first name</label>
      <div #firstName contentEditable="true" (keyup)="onChange()">{{this._firstName}}</div>
      <br />
      <label>last name</label><input [(ngModel)]="_lastName"  (ngModelChange)="onChange()" />
    </div>
  `,providers: [ // IMPORTANT !!
    {
      provide: NG_VALUE_ACCESSOR,useExisting: forwardRef(() => MyCompleteNameInputComponent),multi: true
    }
  ]
})
export class MyCompleteNameInputComponent implements ControlValueAccessor {

  @ViewChild('firstName') editableDiv: ElementRef;

  private _firstName: string = '';
  private _lastName: string = '';

  onChange() {

    this._firstName = this.editableDiv.nativeElement.innerText;

    if (this._onChange) {
      this._onChange(this._firstName + ' ' + this._lastName);
    }
  }


  // ControlValueAccessor implementation
  // ====================================

  private _onChange = (_) => { }; // call it if your value changed..
  private _onTouched = () => { }; // call it "on blur" ..

  // will be called if a values comes in via ngModule !
  writeValue(val: any) {
    if (!val || !val.split) val = '';

    let splitted = val.split(' ');
    this._firstName = splitted[0] || '';
    this._lastName = splitted[1] || '';
  }

  registerOnChange(fn: (_: any) => void): void { this._onChange = fn; }
  registerOnTouched(fn: () => void): void { this._onTouched = fn; }
}

@Component({
  selector: 'my-app',template: `
    <div>
      <h2>Hello {{name}}</h2>
      <my-name-input [(ngModel)]="name"></my-name-input>
    </div>
  `,MyCompleteNameInputComponent ],bootstrap: [ App ]
})
export class AppModule {}

今天关于AngularJS和contentEditable两种方式的绑定无法正常工作angularjs数据绑定的介绍到此结束,谢谢您的阅读,有关android – Gradient XML drawable center无法正常工作、Android支持Cardview contentPadding无法正常工作、angular 1.2.5 contenteditable 指令、Angular 2与contentEditable div和ngModel支持形成等更多相关知识的信息可以在本站进行查询。

本文标签: