2013-01-08 51 views
1
<FORM> 
<DIV class="outer-class"> 
     <INPUT class="toValidate" type = "text"/> 
     <INPUT class="somethingElse" type= "text"/> 
     <INPUT class="toValidate" type ="text"/> 
</DIV> 
<DIV class="outer-class"> 
     <INPUT class="toValidate" type = "text"/> 
     <INPUT class="somethingElse" type= "text"/> 
     <INPUT class="toValidate" type ="text"/> 
</DIV> 
<INPUT type="submit"/> 
</FORM> 

我的問題是在給定的嵌套層次領域的執法不區分大小寫的唯一性? 我猜這個邏輯應該在OuterClassDirective中,但我似乎無法弄清楚邏輯應該是什麼樣子?使用angularjs

任何意見,將不勝感激。

謝謝!

+0

你的意思是在文本字段中鍵入一個獨特的價值? – asgoth

+0

是的,無論是typer或從初始頁面加載服務器填充 –

+0

一般來說,填充服務器上的字段是一個壞主意。將JSON從服務器發送到客戶端並讓Angular處理它會更好。 –

回答

1

這是怎麼回事。你的outerClassDirective應該有一個控制器,它將把使用的值存儲在一個數組中。它會跨越其正文中的輸入字段。您的toValidate指令需要outerClassDirective並將模型值添加到數組中,使其無效(如果存在)。

這裏是(未經測試)一試:

app.directive('outerClass', function() { 
    var values = []; 
    var valid = true; 
    return { 
     template: '<div ng-transclude></div>', 
     transclude: true, 
     replace: true, 
     require: 'ngModel', 
     controller: function() { 
     this.addValue: function(value) { 
      valid = values.indexOf(value) > -1; 
      values.push(value); 
     }; 
     }, 
     link: function(scope, elm, attrs, ctrl) { 
     ctrl.$setValidity('toValidate', valid) 
     } 
    }; 
}); 

app.directive('toValidate', function() { 
    return { 
     require: '^outerClass', 
     link: function(scope, elm, attrs, ctrl) { 
      ctrl.addValue(attrs.value); 
     } 
     } 
    }; 
}); 
+0

我可能已經過早地接受了 - 我修復了語法錯誤,現在看起來如下: 錯誤:沒有控制器:ngModel 任何想法?謝謝! –

+0

您的outerClass標籤需要ng-model屬性。 – asgoth

+0

啊,是的。謝謝。有什麼建議可以創造出良好的ng模型價值?我現在將它設置爲ng-model =「$ index」(它嵌套在ng-repeat中),因爲(我不認爲?)我需要將div模型綁定到任何東西上? –

1

Angular主頁上的'tabs'和'pane'指令解決了類似的問題 - 子窗格指令需要與父'tabs'指令進行通信。

在outerclass指令中定義一個控制器,然後在控制器上定義一個方法(使用this而不是$ scope)。然後在toValidate指令中使用require: '^outerclass'。在toValidate鏈接函數中,您可以$監視值更改並調用外部類控制器上的方法來將值傳遞給上方。在outerclass指令中進行驗證。

另請參閱'this' vs $scope in AngularJS controllers