在angularjs指令中应用验证

在angularjs指令中应用验证,angularjs,angularjs-directive,Angularjs,Angularjs Directive,我正在AngularJS 1.5.x版本中构建一组可重用组件。每个指令都接受如下模型 <app-grid ng-model="scope.gridModel" /> 是否有任何方法可以在指令中检查传递的模型是否为GridModel类型?我会在指令链接函数中尝试以下操作: ... link: function (scope, element, attrs, ngModel) { if (ngModel instanceof GridModel) { // right cl

我正在
AngularJS 1.5.x版本
中构建一组可重用组件。每个指令都接受如下模型

<app-grid ng-model="scope.gridModel" />

是否有任何方法可以在指令中检查传递的模型是否为
GridModel
类型?

我会在指令
链接
函数中尝试以下操作:

...
link: function (scope, element, attrs, ngModel) {
  if (ngModel instanceof GridModel) {
    // right class
  } else {
    // wrong class
  }
},
...
更新: 这将立即检查
ngModel
实例类型。
如果要在类型发生更改时检查类型,应设置一个
$watch

大概是这样的:

scope.$watch('ngModel', function(newValue, oldValue) {
  if (newValue instanceof GridModel) {
    // right class
  } else {
    // wrong class
  }
});

这是可能的。首先,我建议您创建一个服务来访问
GridModel
对象,以便您可以从控制器和指令访问该对象

myApp.service('GridService', function() {
    this.GridModel = function(cols) {
        this.cols = cols;
    };
});
然后,在指令中,可以使用
InstanceOf
检查模型是否为
GridModel
类型

var GridModel = GridService.GridModel;
$scope.isGridModel = ($scope.model instanceof GridModel);

我用一个指令构建了一个示例,如果它的模型类型为
GridModel
,那么它将显示
true
,否则
false
。请参阅以获取示例。

这仅适用于第一次rgt?如果模型稍后更改,会发生什么情况。假设某个时候模型被设置为不同的类型。这很酷。我对棱角有点陌生,所以还有一个问题。示波器。$watch可以做深度手表rgt吗?如果是这样的话,那么我该如何在这里使手表更平坦呢?您可以使用第三个参数控制
$watch
的深度:
scope.$watch('ngModel',function(newVal,oldVal){/*…*/},true)很深,而
作用域。$watch('ngModel',function(newVal,oldVal){/*…*/},false)不是。。。
var GridModel = GridService.GridModel;
$scope.isGridModel = ($scope.model instanceof GridModel);