2013-03-27 18 views
5

ディレクティブと分離スコープで非常に奇妙な現象が発生します。スコープ内の属性は、属性の名前に応じて機能するか動作しません。私が使用している場合ディレクティブスコープの属性が属性名に応じて壊れます

{check:'@check'} 

それはうまく動作し、期待どおりに動作します。しかし、私が使用する場合:

{checkN:'@checkN'} 

定義された関数は決して割り当てられません。

HTML::

<item ng-repeat="list_item in model.list" model="list_item" checkN="checkName()" check="checkName()" position="$index"></item>' 

Javascriptを

app.directive('item', function(){ 
    return { 
     restrict: 'E', 
     replace : false, 
     scope:{ 
       $index: '=position', 
       check: '&check', 
       checkN: '&checkN', 
       model:'=' 
     },   
     template: '', 
     link: function(scope, element, attrs){ 
     console.log(scope.check()) 
     console.log(scope.checkN())   
     } 
    } 
}); 

コンソールその後、私に次のようになります:

The checkName function has been called [which is the return string of the function] 
undefined 

それは本当にあるの例は次のようになります可能性それは大文字の使用法に依存していますか?これは非常に「予期しない」動作になります。あなたの助け

schackiため

おかげで

+0

"指令には、' ngBind'のようなラクダの名前が付いています。この指令は、ラクダの大文字小文字の名前を ':'、 '-'または' _'という特殊文字でスネークケースに変換することによって呼び出すことができます。 HTMLバリデータに準拠させるには、 'x-'や 'data-'の接頭辞を付けます。 - [Directive page](http://docs.angularjs.org/guide/directive)セクション「HTMLからの指示の呼び出し」 –

答えて

9

HTMLは、ブラウザによって互いに区別できないだろう、そのためmyAttributemyattribute大文字と小文字を区別しません。 Angularjsの作者は、htmlからjavascriptに、またその逆を指示の観点から渡すことについて設計上の決定を下しました。

ngRepeat指示はビュー(html)にng-repeatとして使用されます。 同様に、ディレクティブcheckNは、ディレクティブとしてそれを認識するためにcheck-nとして使用する必要があります。

+1

お返事ありがとうございます。角度のあるチームは、指示を明確に文書化しています。しかし、ドキュメントに続いて、私はここで同じ振る舞いを期待していませんでした。 – schacki

+1

@schackiまさに私の場合、頭字語で始まった属性名を持っていました。 DNSHost = "myhost"、Angular *は黙って翻訳を無視して無視しました。ドキュメントには何も言われていません。ちょうど2時間を無駄にした:( –

関連する問題