directory search
AngularJS API Reference auto auto/service auto/service/$injector auto/service/$provide ng ng/directive ng/directive/a ng/directive/form ng/directive/input ng/directive/input[checkbox] ng/directive/input[date] ng/directive/input[dateTimeLocal] ng/directive/input[email] ng/directive/input[month] ng/directive/input[number] ng/directive/input[radio] ng/directive/input[text] ng/directive/input[time] ng/directive/input[url] ng/directive/input[week] ng/directive/ngApp ng/directive/ngBind ng/directive/ngBindHtml ng/directive/ngBindTemplate ng/directive/ngBlur ng/directive/ngChange ng/directive/ngChecked ng/directive/ngClass ng/directive/ngClassEven ng/directive/ngClassOdd ng/directive/ngClick ng/directive/ngCloak ng/directive/ngController ng/directive/ngCopy ng/directive/ngCsp ng/directive/ngCut ng/directive/ngDblclick ng/directive/ngDisabled ng/directive/ngFocus ng/directive/ngForm ng/directive/ngHide ng/directive/ngHref ng/directive/ngIf ng/directive/ngInclude ng/directive/ngInit ng/directive/ngKeydown ng/directive/ngKeypress ng/directive/ngKeyup ng/directive/ngList ng/directive/ngModel ng/directive/ngModelOptions ng/directive/ngMousedown ng/directive/ngMouseenter ng/directive/ngMouseleave ng/directive/ngMousemove ng/directive/ngMouseover ng/directive/ngMouseup ng/directive/ngNonBindable ng/directive/ngOpen ng/directive/ngPaste ng/directive/ngPluralize ng/directive/ngReadonly ng/directive/ngRepeat ng/directive/ngSelected ng/directive/ngShow ng/directive/ngSrc ng/directive/ngSrcset ng/directive/ngStyle ng/directive/ngSubmit ng/directive/ngSwitch ng/directive/ngTransclude ng/directive/ngValue ng/directive/script ng/directive/select ng/directive/textarea ng/filter ng/filter/currency ng/filter/date ng/filter/filter ng/filter/json ng/filter/limitTo ng/filter/lowercase ng/filter/number ng/filter/orderBy ng/filter/uppercase ng/function ng/function/angular.bind ng/function/angular.bootstrap ng/function/angular.copy ng/function/angular.element ng/function/angular.equals ng/function/angular.extend ng/function/angular.forEach ng/function/angular.fromJson ng/function/angular.identity ng/function/angular.injector ng/function/angular.isArray ng/function/angular.isDate ng/function/angular.isDefined ng/function/angular.isElement ng/function/angular.isFunction ng/function/angular.isNumber ng/function/angular.isObject ng/function/angular.isString ng/function/angular.isUndefined ng/function/angular.lowercase ng/function/angular.module ng/function/angular.noop ng/function/angular.toJson ng/function/angular.uppercase ng/object ng/object/angular.version ng/provider ng/provider/$animateProvider ng/provider/$compileProvider ng/provider/$controllerProvider ng/provider/$filterProvider ng/provider/$httpProvider ng/provider/$interpolateProvider ng/provider/$locationProvider ng/provider/$logProvider ng/provider/$parseProvider ng/provider/$rootScopeProvider ng/provider/$sceDelegateProvider ng/provider/$sceProvider ng/service ng/service/$anchorScroll ng/service/$animate ng/service/$cacheFactory ng/service/$compile ng/service/$controller ng/service/$document ng/service/$exceptionHandler ng/service/$filter ng/service/$http ng/service/$httpBackend ng/service/$interpolate ng/service/$interval ng/service/$locale ng/service/$location ng/service/$log ng/service/$parse ng/service/$q ng/service/$rootElement ng/service/$rootScope ng/service/$sce ng/service/$sceDelegate ng/service/$templateCache ng/service/$timeout ng/service/$window ng/type ng/type/$cacheFactory.Cache ng/type/$compile.directive.Attributes ng/type/$rootScope.Scope ng/type/angular.Module ng/type/form.FormController ng/type/ngModel.NgModelController ngAnimate ngAnimate/provider ngAnimate/provider/$animateProvider ngAnimate/service ngAnimate/service/$animate ngCookies ngCookies/service ngCookies/service/$cookies ngCookies/service/$cookieStore ngMessages ngMessages/directive ngMessages/directive/ngMessage ngMessages/directive/ngMessages ngMock ngMock/function ngMock/function/angular.mock.dump ngMock/function/angular.mock.inject ngMock/function/angular.mock.module ngMock/object ngMock/object/angular.mock ngMock/provider ngMock/provider/$exceptionHandlerProvider ngMock/service ngMock/service/$exceptionHandler ngMock/service/$httpBackend ngMock/service/$interval ngMock/service/$log ngMock/service/$timeout ngMock/type ngMock/type/angular.mock.TzDate ngMockE2E ngMockE2E/service ngMockE2E/service/$httpBackend ngResource ngResource/service ngResource/service/$resource ngRoute ngRoute/directive ngRoute/directive/ngView ngRoute/provider ngRoute/provider/$routeProvider ngRoute/service ngRoute/service/$route ngRoute/service/$routeParams ngSanitize ngSanitize/filter ngSanitize/filter/linky ngSanitize/service ngSanitize/service/$sanitize ngTouch ngTouch/directive ngTouch/directive/ngClick ngTouch/directive/ngSwipeLeft ngTouch/directive/ngSwipeRight ngTouch/service ngTouch/service/$swipe
characters

AngularJS: API: ng/directive/ngModelOptions

ngModelOptions

  1. - directive in module ng

允许调整模型更新时机。使用 ngModelOptions 你可以指定一个触发模型更新和(或)消除抖动延迟事件列表,使实际更新只发生在计时器过期时。此计时器会被之后的其他变化重置。

鉴于ngModelOptions的性质, 在视图中显示的输入域的值可能不同于实际模型的值。这意味着如果你更新模型,你需要在新旧关的输入域上调用$rollbackViewValue,以确保它与模型同步,并会消除任何抖动。

引用控制的$rollbackViewValue方法的最简单的方法是确保输入组件被放置在一个具有name属性的表单中。这很重要,因为 form控制器使用它们的 name 属性发布到相关域。

任何挂起的更改会立即生效,当整个表单通过 submit事件提交时。注意 ngClick 事件会在模型更新前生效。使用 ngSubmit 来存取更新后的模型。

指令信息

  • 这个指令执行优先级为0.

用法

  • 作为属性使用:
    <ANY
      ng-model-options="">
    ...
    </ANY>

参数

参数 类型 详述
ngModelOptions Object

应用于当前模型的可选项。有效的键名为:

  • updateOn: 用于指定输入绑定到哪个事件的字符串。你可以设置使用空格分隔的事件列表。有一个特殊事件叫 default ,用于匹配控件自身的默认事件。
  • debounce: 以毫秒为单位的整型值,用于防止模型更新抖动。值为0会立即触发更新。如果使用一个对象替代的话,你可以为每个事件指定值。例如:ngModelOptions="{ updateOn: 'default blur', debounce: {'default': 500, 'blur': 0} }"
  • getterSetter: 布尔值,用于声明 ngModel是否绑定到getters/setters函数上。

示例

下面的例子演示如何替换立即更新。表单内的输入控件只会在失去焦点时才更新模型 (blur 事件)。如果当前焦点在输入字段时按了escape键,当前模型的值会被重置。

index.html
<div ng-controller="ExampleController">
  <form name="userForm">
    Name:
    <input Type="text" name="userName"
           ng-model="user.name"
           ng-model-options="{ updateOn: 'blur' }"
           ng-keyup="cancel($event)" /><br />

    Other data:
    <input Type="text" ng-model="user.data" /><br />
  </form>
  <pre>user.name = <span ng-bind="user.name"></span></pre>
</div>
app.js
angular.module('optionsExample', [])
  .controller('ExampleController', ['$scope', Function($scope) {
    $scope.user = { name: 'say', data: '' };

    $scope.cancel = Function (e) {
      if (e.keyCode == 27) {
        $scope.userForm.userName.$rollbackViewValue();
      }
    };
  }]);
protractor.js
var model = element(by.binding('user.name'));
var input = element(by.model('user.name'));
var other = element(by.model('user.data'));

it('should allow custom events', Function() {
  input.sendKeys(' hello');
  input.click();
  expect(model.getText()).toEqual('say');
  other.click();
  expect(model.getText()).toEqual('say hello');});

it('should $rollbackViewValue when model changes', Function() {
  input.sendKeys(' hello');
  expect(input.getAttribute('value')).toEqual('say hello');
  input.sendKeys(protractor.Key.ESCAPE);
  expect(input.getAttribute('value')).toEqual('say');
  other.click();
  expect(model.getText()).toEqual('say');});

下面的例子演示如何消除模型改变时的抖动。模型会在最后一次改变的1秒后更新。如果按了Clear按钮,任何消除抖动操作会被取消,值会清空。

index.html
<div ng-controller="ExampleController">
  <form name="userForm">
    Name:
    <input Type="text" name="userName"
           ng-model="user.name"
           ng-model-options="{ debounce: 1000 }" />
    <button ng-click="userForm.userName.$rollbackViewValue(); user.name=''">Clear</button><br />
  </form>
  <pre>user.name = <span ng-bind="user.name"></span></pre>
</div>
app.js
angular.module('optionsExample', [])
  .controller('ExampleController', ['$scope', Function($scope) {
    $scope.user = { name: 'say' };
  }]);

下面的例子演示如何绑定到getter/setters:

index.html
<div ng-controller="ExampleController">
  <form name="userForm">
    Name:
    <input Type="text" name="userName"
           ng-model="user.name"
           ng-model-options="{ getterSetter: true }" />
  </form>
  <pre>user.name = <span ng-bind="user.name()"></span></pre>
</div>
app.js
angular.module('getterSetterExample', [])
  .controller('ExampleController', ['$scope', Function($scope) {
    var _name = 'Brian';
    $scope.user = {
      name: Function (newName) {
        return angular.isDefined(newName) ? (_name = newName) : _name;
      }
    };
  }]);
Previous article: Next article: