2016-12-28 2 views
0

私は、このディレクティブを使用します。AngularJSディレクティブ - 初期関数invoke

function communicationCreateFormDirective($timeout) { 
    var directive = { 
     restrict: 'E', 
     scope: { 
      selectedCommunicationGroups: '=', 
      currentUser: '=' 
     }, 
     templateUrl: 'app/communication/....html', 
     link: function($scope) { 
      ... 
      connect(); 

をし、私が最初に関数が(接続起動します)が、私はエラーを取得:

angular.js:14110 ReferenceError: connect is not defined 

また$ scope.connect ()は機能しません。誰もする方法を知っていますか?機能ザッツ

$scope.connect = function() { 
       var socket = new SockJS('/api/chat'); 
       $scope.stompClient = Stomp.over(socket);    
       $scope.stompClient.connect({}, function(frame) { 
        console.log('webSocket Connected in communicationCreateForm.directive.js: ' + frame); 
        $scope.stompClient.subscribe('/topic/communication/' + $scope.currentUser.id, function(message) { 
         //vm.showMessage(JSON.parse(message.body)); 
         alert('Message response QUMA: ' + JSON.parse(message.body)); 
        }); 
       }); 
      } 
+3

まあまあ...未定義の関数を呼び出すと普通に起こります –

+0

'$ scope.connect'関数はディレクティブスコープの外で定義されています別のコントローラでは?)次に、 'scope:{...}'オブジェクトを変更してディレクティブにバインドし、 'connect: '&''を追加する必要があります。次に、 '$ scope.connect()'を使ってディレクティブから関数を呼び出すことができるはずです(ただし、 'connect =" connect() "'属性を使ってビューのディレクティブにバインドすることを忘れないでください)。 –

答えて

1

あなたのディレクティブを使用して、接続定義されているコントローラの範囲に直接アクセスすることはできません新しい孤立スコープを作成しています。 selectedCommunicationGroupscurrentUserを渡す方法と同様の関数をリンク関数のスコープに渡す必要があります。

function communicationCreateFormDirective($timeout) { 
    var directive = { 
    restrict: 'E', 
    scope: { 
     selectedCommunicationGroups: '=', 
     currentUser: '=', 
     connect: '=' // <- "links" the scopes together 
    }, 
    templateUrl: 'app/communication/....html', 
    link: function($scope) { 
     ... 
     $scope.connect(); 

HTML:<wheverYouCalledIt connect="connect" ... >

ます。また、接続のための'&'の代わり'='を使用することができますが、これはあなたが関数を呼び出すときに沿ってより多くの事を渡すことができるようになるが、あなたはそれを必要とするようには見えません。あなたがこれをした場合、HTML属性は若干変更されてconnect="connect()"

+0

いいえ、AFAIKは、 ''&''を使用してディレクティブに関数をバインドします。 '' = '' –

+1

@AlonEitanメモを追加しました。 '&'は、あなたが呼び出しにもっと多くのものを渡せるようにするためのものです(ローカルパラメータなど)。それはあなたの 'ngClick'sなどに' $ event'がそこにいかにあるかです。どちらの方法もこの場合に機能します。 – TheSharpieOne

+0

** connect()**は同じディレクティブにあります!!! – quma

関連する問題