2014-09-24 5 views
0

Я пытаюсь выполнить функцию после окончания видео, функция находится внутри углового контроллера. Эта функция вызывается, но я получаю сообщение об ошибке с указанием:Функция не определена внутри контроллера, angularJS

ReferenceError: postVendor is not defined 

Вот вызова JavaScript:

 $.noConflict(); 
     jQuery(document).ready(function ($) { 
      var api = flowplayer(); 
      api.bind("finish", function (e, api) { 
       var data = "true"; 
       var url = "someurlhere"; 
       postVendor(url, data); 
      }); 
     }); 

и вот мой модуль/контроллер (тот же файл):

var registrationModule = angular.module('registrationModule', []); 

registrationModule.controller("vendorCtrl", function ($scope, $http) { 
    $scope.postVendor = function (url, data) { 
     $http.post(url, data).success(function (data) { console.log(data) }).error(function (data) { console.log(data) }); 
    }; 

}); 

в моих html:

<html xmlns="http://www.w3.org/1999/xhtml" ng-app="registrationModule"> 

<body ng-controller="vendorCtrl"> 

Я использую угловой 1.2.25.

Любые идеи о том, как правильно вызвать функцию?

ответ

1

1.Please убедитесь, что Jquery загружается раньше angular.js

2. Убедитесь, что ваше vendorCtrl возвращение $ scope.postVendor (вы можете сделать это путем добавления):

return { 
    postVendor : $scope.postVendor 

    }; 

Пожалуйста см пример

$(document).ready(function() { 
 
    
 
     
 
    angular.element('#angularController').controller().doSomthing("Hello ", "from jquery") 
 
    
 
    }); 
 

 

 
var app = angular.module('app', []); 
 

 
app.controller('firstCtrl', function($scope){ 
 

 
    $scope.doSomthing = function(a,b){ 
 
    alert(a+b); 
 
    }; 
 
    
 
    
 
    
 
return { 
 
    doSomthing: $scope.doSomthing 
 
    
 
    }; 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 

 

 
<body ng-app="app" > 
 
    <div id="angularController" ng-controller="firstCtrl"> 
 

 
     </div> 
 
</body>
Это должно помогает

$.noConflict(); 
    jQuery(document).ready(function ($) { 
     var api = flowplayer(); 
     api.bind("finish", function (e, api) { 
      var data = "true"; 
      var url = "someurlhere"; 
      angular.element('body').controller().postVendor(url, data); 
     }); 
    }); 

для получения дополнительной информации см здесь Call Angular JS from legacy code

+0

спасибо, я просто пытался вариации этого, но получает: 'Error: [jqLite: nosel]! Глядя на элементы с помощью селекторов не поддерживаются jqLite' – user4075691

+0

@ user4075691 смотрите обновление – sylwester