在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);