2016-10-30 36 views
0

私は、2つの変数を$ scope経由で私のビューに渡すコントローラを持っています。これらの変数をビューに表示することができます。ディレクティブのスコープが表示されない

私の見解では、ディレクティブスコープに2つの変数を渡すディレクティブがあります。ここで

は私のディレクティブです:

.directive('notes', function(){ 
    return { 
    restrict: 'E', 
    templateUrl:'views/directives/notes-tpl.html', 
    scope:{ 
     time:'=', 
     unit:'=' 
    }, 
    controller:['$scope',function($scope){ 

     console.log('Current Time Stamp: ' + $scope.time); 
     console.log('Current Unit Stamp: ' + $scope.unit); 

     }; 

    }] 
    }; 
}) 

、ここでは私のhtmlです:

<notes time='currentTimeStamp' unit='currentUnitStamp'></notes> 

問題は(私にconsole.logである)未定義としてそれらを示しています。

私はモーダルから指令を呼んでいる:あなたの例新しい推測を見た後

<!-- NOTES MODAL --> 
<script type="text/ng-template" id="notesModal.html"> 
    <div class="modal-header"> 
     <a class="close" data-dismiss="modal" aria-label="Close" ng-click="close()"><span aria-hidden="true">&times;</span></a> 
     <h3 class="modal-title">Notes</h3> 
    </div> 

    <notes currentTimeStamp='{{currentTimeStamp}}' currentUnitStamp='{{currentUnitStamp}}'></notes> 

</script> 
+2

がここに正常に動作します:http://plnkr.co/edit/lXctOKdJvqsy4zhVqhCk?p=preview。あなたのプロパティに値があるかどうか確信していますか? – Claies

+0

@Claies、それはとても奇妙です。私は、ディレクティブが座っているビューにスコープの結果を表示するので、ViewへのControllerのフォームを取得しています。しかし、私のconsole.logにはこのディレクティブの中で定義されていません。 – cnak2

+0

Claeisがしたことをやってください:問題を再現した完全な最小例を投稿してください。そうしている間にあなた自身の間違いを見つけるでしょう。 –

答えて

-1

<notes currentTimeStamp='{{currentTimeStamp}}' currentUnitStamp='{{currentUnitStamp}}'></notes> 
  1. ディレクティブを呼び出すためのあなたのHTMLだことしかし、あなたのnotes.jsにはこれに関する拘束はありません。

    return { 
        ... 
        scope: { 
         currentTimeStamp="", 
         currentUnitStamp="" 
        } 
        ... 
    } 
    
  2. あなたはこのようなあなたのディレクティブにこれを渡す必要があります。current-time-stamp代わりのcurrentTimeStamp

    <notes current-time-stamp='currentTimeStamp' current-unit-stamp='currentUnitStamp'></notes> 
    

    ご注意ください。 ノーマライゼーションセクションをチェックしてください。

    https://docs.angularjs.org/guide/directive

私はこの1つはあなたの問題を解決することを願っています。


もう一つの推測:

それはあなたが純粋なJSに "角度のうち、" 更新されているのだろう。 角度があなたの値を更新する必要があることを知らないので。

clickイベントの一部の値を更新するとします。ここで、ng-clickを使用して、メソッドを更新および呼び出しします(角度はダイジェストサイクルのそれ自体で実行され、値を更新します)。

このよう

:我々は角を使用していない何らかの理由で今ng-click="updateTimeStamp()

が、代わりにネイティブのイベントリスナーelement.addEventListener("click", updateTimeStamp);

私たちが今したいのであればスコープとその値を更新し、たとえば、$timeoutサービスでダイジェストサイクルを開始する必要があります。ダイジェストサイクルについて

詳細情報:https://docs.angularjs.org/guide/scope

検証のためにあなたが値を設定し、リスナーの終わりに$timeout(angular.noop);を置きます。

例:

myElement.addEventListener("click", function() { 
    var newTime = takeMeFromSomewhere; 
    $scope.time = newTime; 
    // Angular doesn't know to update the binding! 
    $timeout(angular.noop); 
    // now you kicked off the digest cycle and angular will update the values 
}); 
+0

ディレクティブがモーダル内にあり、モーダルに独自のスコープがあるので、これが可能でしょうか? – cnak2

+0

はい、データをあなたのnotes指示のスコープに渡す必要があります。 –

関連する問題