2016-09-06 90 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