2013-07-15 42 views
1

很抱歉,如果標題是不明確的,這裏是我想要做的事:Angular.js通過參數設置指令中的NG-顯示值

我有多個註冊的形式和每一個他們有一個密碼字段。現在,我想爲密碼設置一些要求,即。我希望得到一個密碼長於5

我:

<form name="myForm"> 

    <!-- some elements --> 

    <input type="password" required ng-model="user.password" name="password" ng-minlength="5"> 

,並在之後的是:

<div ng-show="myForm.password.$error.minlength">  
    Password is too short.  
</div> 

<!-- some other elements --> 

</form> 

我以爲我會重構這個錯誤消息轉換爲指令,唯一的問題是,我似乎無法正確地將表單的名稱傳遞給指令。

該指令是這樣的:

myApp.directive('passwordLengthError', [function() { 
    return { 
     restrict: 'E', 
     replace: true, 
     template:'<div ng-show="{{form}}.password.$error.minlength">Password is too short.</div>', 
     scope: { 
      form: '@' 
     } 
    }; 
}]); 

,我這樣稱呼它:

<div> 
    <password-length-error form="myForm"/> 
</div> 

如果我在Chrome的Web檢查檢查,我看到的參數是存在的,我看到

<div ng-show="myForm.password.$error.minlength"> 

但是,它實際上並沒有工作,如果密碼短於5我看不到消息彈出字符。

有沒有辦法讓這項工作,或者這是不可能的?提前致謝。

回答

1

您的隔離作用域中的@正在嘗試評估角度表達式。您只是傳遞一個字符串,因此您可以直接將scope變量設置爲指令中的屬性值,而不需要隔離範圍或對屬性進行評估。

所以:

scope.form = attrs.form; 

和整個指令是:

app.directive('passwordLengthError', [function() { 
    return { 
     restrict: 'E', 
     replace: true, 
     template:'<div ng-show="{{form}}.password.$error.minlength">Password is too short.</div>', 
     link: function(scope, element, attrs){ 
      scope.form = attrs.form // the attribute is a string, so, YAY 
     } 
    }; 
}]); 

YOUR DEMO