在angularjs指令中应用验证

时间:2016-09-06 07:52:20

标签: angularjs angularjs-directive

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

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

gridModel是一个简单的类,如下所示,

function GridModel(cols) {
   this.cols = cols;
}

我有什么方法可以在指令中检查传递的模型是GridModel类型吗?

2 个答案:

答案 0 :(得分:1)

我会在我的指令link函数中尝试这样的事情:

...
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
  }
});

答案 1 :(得分:0)

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

myApp.service('GridService', function() {
    this.GridModel = function(cols) {
        this.cols = cols;
    };
});

然后,在您的指令中,您可以使用GridModel检查模型是否为InstanceOf类型。

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

我构建了一个带有指令的示例,如果其模型的类型为true,则会显示GridModel,否则为false。有关示例,请参阅this JSFiddle