56

このディレクティブは、ページ移動の進行状況を示すプログレスバーと呼ばれるHTML要素を作成しようとしています。 <progress-bar progress='1' max='6' error="true"></progress-bar> htmlの^^要素の情報をmyディレクティブに渡し、情報を処理してプログレスバーを適切に変更しようとしています。AngularJS指示文渡す文字列

これは整数値をとる「進捗状況」と「最大」で動作しますが、何らかの理由で「エラー」(文字列)を処理するコメントアウトされたコードが問題を引き起こしています。私はangularJSの新人ですので、この音が混乱したり不明瞭に聞こえる場合は申し訳なく思っています。私が精緻化/明確化する必要があるかどうか尋ねてください。前もって感謝します!

app.directive('progressBar', function(){ 

var compileProgressBar = function(scope, elem, attrs) { 
    var append = '<nav class="navbar navbar-fixed-bottom navbar-footer" role="navigation">\ 
        <div class="container">\ 
         <div class="row">'; 
    var i = 1; 
    while (i <= parseInt(scope.max)) { 
     if (i <= parseInt(scope.progress)) { 
      //if (scope.error == "true"){ 
       //... 
      //} 
      //else { 
      append += '<div class="col-xs-1"><div class="circle-filled"><center>'+i+'</center></div></div>' 
      //} 
     } else { 
      append += '<div class="col-xs-1"><div class="circle-hallow"><center>'+i+'</center></div></div>' 
     } 
     i++; 
    } 
    append += '</div></div></nav>' 
    elem.append(append); 
    elem.bind('click', function(){ 
     if (scope.progress > 1) { 
      history.back(); 
      scope.$apply(); 
     } 
    }); 
} 

return { 
    restrict: 'AE', 
    scope: { 
     max: '=max', 
     progress: '=progress' 
     //error: '=error' 
    }, 
    link: compileProgressBar 
} 

});

+0

に結合様式に関する詳細な情報を見つけることができます。 –

+0

あなたはエラーがブール値ではないことを確かめていますか? –

+0

history.back()は、プログレスバーに機能を追加します。プログレスバーをクリックすると、ブラウザ上の戻るボタンをクリックするように動作します。これは、それが正しい方法で動作しています。 また、エラーはブール値にする必要があります。しかし、私はまだHTMLから指示文にブール値を渡す方法を理解していません。/ もう一度、大変感謝します – profoundWanderer

答えて

96

ディレクティブでは、グローバルスコープからディレクティブローカルスコープへの属性の双方向バインディングを使用しています。このモードでは

、HTML内の属性値は式として評価されており、そのため、あなたのディレクティブは式としてを評価した結果にそのローカルscope.errorをバインドしようとします。あなたがscope.error == "true"をテストする場合

、あなたが実際にtrue == "true"をテストしているし、これはJavaScriptでに評価されます。

あなたの問題を解決するには、次のことができます。

  • のいずれかは、あなたのディレクティブ呼び出すときに引用符で囲まれた文字列を使用します。

    <progress-bar progress='1' max='6' error="'true'"></progress-bar> 
    
  • をかあなたがいないので、あなたのディレクティブであなたの結合様式を変更します双方向結合が必要です。 @変数は常にstring型です。

    return { 
        restrict: 'AE', 
        scope: { 
         max: '@max', 
         progress: '@progress', 
         error: '@error' 
        }, 
        link: compileProgressBar 
    } 
    

あなたは)(history.backが何であるかをAngular $compile documentation

+0

これは非常に役に立ちます。本当にありがとう。しかし、問題はまだ比較テストが間違って評価されていません....私は 'error: '= error''のコメントを外すと何らかの理由でサイトがクラッシュします。何らかの理由でこの行が問題を引き起こしていて、 'error: '@ error''に変更しても問題は解決しませんでした。私の現在のコードが 'true ==" true "'をテストしていることを知っておいて嬉しいです。私はその段階に入っていたので、再度、チップの上にありがとう – profoundWanderer

+2

エラーのコメントを外すときに、些細な構文エラーを避けてください。行のコメントを外すときのコンソールエラーは何ですか? – rluta

+0

うわー.. ROOKIE MISTAKE !!私の本当の問題を予知し、私の現在の/愚かなものを特定するために感謝rluta。解決済み。とても有難い。 – profoundWanderer

関連する問題