Angularjs - 扩展ngModel

3

下午好,

ngModelController 可以控制 $dirty$pristine,但我想要自己的。我该如何扩展 ngModelController,以提供类似于 ngModelCtrl.$setCustom() 的功能?

谢谢。

1个回答

2

你不能扩展ngModelDirective,但你可以创建自己的ng-model。在Angular中相对不为人知的是,你可以拥有多个同名指令,并且它们都将被执行。这里是一个带有示例的JSBin链接: http://jsbin.com/nopoyiso/1/edit

对于那些不想打开JSBin的人:

myApp.directive('ngModel', function() {
  return {
    restrict: 'A', 
    require: '?ngModel',
    link: function(scope, elem, attrs, ngModel) {
      ngModel.setCustom = function() {
        console.log('hello!');
      }
    }
  }
});

这是一种做法,但我认为这样做会让你自己和其他人都感到困惑。你能详细说明一下你想做什么吗?也许有更好的方法去实现。


当您从表单对象访问输入时,可以确定它是脏的还是原始的。我想添加一个自定义状态,例如“模糊”。 - MaxWillmott
那么我猜你可以像我创建的JSBin一样做。如果你创建自己的指令而不是调用你的指令ng-model,它会更清晰一些,但是你需要将你的指令和ng-model都添加到你的输入中。所以我想这取决于你决定哪种方式最好。 - Anders Ekdahl
不错。没想到在模型控制器上设置的 props 会通过表单控制器可用。 - MaxWillmott
是的,这就是 JavaScript 的强大之处,你可以增强任何想要增强的对象。但是当你可以避免这样做时,也应该避免,因为很难找到增强其他对象的代码。 - Anders Ekdahl
@AndersEkdahl 为什么 JSBin 链接与代码片段有很大不同? - Luke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接