AngularJS ng-model-options getter-setter

标签 angularjs getter-setter

我刚刚升级到 Angular 版本 1.3.8。

当使用 1.2.23 版本时,我创建了一个指令来将数据表单 View 转换为模型,反之亦然。

这是我的指令:

.directive('dateConverter', ['$filter', function ($filter) {

    return {

        require: 'ngModel',

        link: function (scope, element, attrs, ngModelController) {

            // Convert from view to model
            ngModelController.$parsers.push(function (value) {
                return $filter('date')(new Date(date), 'yyyy-MM-ddTHH:mm:ss')
            });

            // Convert from model to view
            ngModelController.$formatters.push(function (datetime) {
                return $filter('date')(datetime, 'MM/dd/yyyy');
            });
        }
    };
}]);

});

我看到了here现在支持绑定(bind)中的 getter 和 setter,但我在任何地方都找不到如何使用 两个 setter/getter 二传手。有什么办法吗?也就是说 - ng-model-options 可以替换我的转换指令吗?

谢谢

最佳答案

文档可能看起来有点模糊,但用法很简单。
你需要做什么:

  • HTML:
    <input ng-model="pageModel.myGetterSetterFunc"
    ng-model-options=" {getterSetter: true }">
    
  • 在 JS Controller 中,而不是实际模型,创建一个函数,如果没有发送参数,它将返回值(+应用剥离),如果发送参数,它将更新模型(+应用其他更改)。

  • getter/setter 基本上是 View 值和模型值之间的另一个“层”。

    例子:

    $scope.pageModel.firstName = '';
    $scope.pageModel.myGetterSetterFunc: function (value) {
      if (angular.isDefined(value)) {
        $scope.pageModel.firstName = value + '...';
      } else {        
        return $scope.pageModel.firstName.substr(0,
          $scope.pageModel.firstName.lastIndexOf('...')
        );
      }
    }
    

    演示柱塞:
    http://plnkr.co/edit/Zyzg6hLMLlOBdjeW4TO0?p=preview

    (检查控制台 - http://screencast.com/t/3SlMyGnscl)

    注意:看看这在可重用性方面将如何扩展会很有趣。我建议将这些 getter/setter 创建为外部化的可重用方法,并为它们配备生成器(因为每种情况下的数据模型都不同)。在 Controller 中只调用那些生成器。只是我的2美分。

    关于AngularJS ng-model-options getter-setter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27918987/

    相关文章:

    javascript - 使用 ngRoute 处理 AngularJS 错误

    javascript - 使用 GruntJS 的 AngularJS 开发模式

    javascript - AngularJS 中按钮的条件必需验证

    java - 无法从另一个类获取文本以在另一个类上打印(菜鸟)

    java - 只返回 ArrayList 中的最后一个元素

    javascript - 直接访问 vuex 状态属性(没有 getter)是不好的做法,为什么?

    javascript - AngularJS Jasmine 测试谷歌地图 : offsetWidth is null

    angularjs - CORS 预检返回 200 但后续 PUT 永远不会发生(具有外部 REST API 的 Angular JS)

    Doctrine Override 关系字段的 getter 和 setter

    javascript - 如何只删除 setter JS?