2016-09-06 85 views
2

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

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

的gridModel是一个简单的类看起来像下面,

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

有没有什么办法可以在传递模式GridModel类型的指令检查?

回答

1

我会尝试这样的事情,在我的指导link功能:

... 
link: function (scope, element, attrs, ngModel) { 
    if (ngModel instanceof GridModel) { 
    // right class 
    } else { 
    // wrong class 
    } 
}, 
... 

UPDATE: 这将检查ngModel实例立即输入。
如果要检查它改变了事件的类型,你应该建立一个$watch ...
事情是这样的:

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

这将只适用于第一次rgt?如果稍后改变模型会发生什么。比方说某个地方,模型设置为不同的类型。 – VJAI

+0

是的,当然...看到我的更新... – MarcoS

+0

这很酷。我对角度不太了解,还有一个问题。范围。$ watch会做一个深入观察的rgt?如果是这样的话,我可以如何让手表在这里更平? – VJAI

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