2014-09-14 4 views
0

У меня проблема: я использую Angular, и мне тоже нужно использовать метод pushMsg, но я не знаю, как это можно назвать, boxCtrl.pushMsg(msg) не работает. Есть идеи?AngularJS вызов метода из контроллера в директиве?

app.directive("fileread", function (socket) { 
return { 
    scope: { 
     fileread: "=" 
    }, 
    link: function (scope, element, attributes) { 
     element.bind("change", function (changeEvent) { 
     var msg = { author: 'me', class: 'me' }; 
      // WHAT HERE??????? 
     }); 
    } 
} 
}); 

boxCtrl = function (socket, $scope) { 
    this.messages = []; 
} 

boxCtrl.prototype = { 
    pushMsg: function (message) { 
     this.messages.push(message); 
    } 
} 

app.controller('boxCtrl', boxCtrl); 
+0

передать функцию в область действия директивы или поместить ее в службу для обмена в любом месте приложения. – charlietfl

+0

также должен использовать директивы 'ng' как можно больше, в вашем случае' ng-change'. Как только вы добавите свой собственный обработчик событий, вам нужно будет уведомить об угловом событии с помощью '$ apply' или' $ timeout' – charlietfl

ответ

0

создается изолированный объем и передать его в качестве атрибута:

app.directive("fileread", function (socket) { 
return { 
    scope: { 
     fileread: "=", 
     pushMessage: "=" 
    }, 
    link: function (scope, element, attributes) { 
     element.bind("change", function (changeEvent) { 
     var msg = { author: 'me', class: 'me' }; 
     scope.pushMessage(msg); 
     }); 
    } 
} 
}); 

И в вашем HTML:

<div fileread="..." push-message="pushMsg"> 

Edit: контроллер должен быть чем-то вроде этого :

app.controller('Ctrl', function($scope) { 
    $scope.messages = []; 

    $scope.name = function(msg) { 
    $scope.messages.push(msg); 
    $scope.$apply(); //I think you need this to update the UI (not sure though) 
    } 
}) 
+0

Теперь я получаю сообщение об ошибке: «Uncaught TypeError: свойство« pushMessage »объекта # не является function " – kempson

+0

Справьте мою ошибку, HTML нужно изменить, преобразуйте случай верблюда в разделенные слова (я отредактировал ответ) –

+0

Хорошо лучше :), но теперь я получаю« Uncaught TypeError: не могу вызвать метод «push» неопределенного », он не видит this.messages value, я думаю :( – kempson

Смежные вопросы