这可以从Angular JS控制器方法中调用简单的JS方法吗?

时间:2015-07-28 09:59:14

标签: javascript jquery angularjs

我们在 controller.js 文件上有一个控制器。

angular.module('MyModule', [])
    .controller('MyController', function ($scope) {
    $scope.myfunction = function (data) {
        alert("---" + data);
        // Test(); Calling java script method
    };
 });

在其他文件 common.js 中,我们定义了

function Test()
{
  alert("Test Method is Calling");
 }

两个文件都包含在html中,但是我们无法从控制器方法调用传统的javascript代码。

请帮忙。

3 个答案:

答案 0 :(得分:2)

工作正常,请确保已加载其他文件:

angular.module('MyModule', [])
    .controller('MyController', function ($scope) {
    $scope.myfunction = function (data) {
        alert("---" + data);
        Test(); // Calling java script method
    };
 });


function Test()
{
  alert("Test Method is Calling");
 }
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="MyModule" ng-controller="MyController">
<button ng-click="myfunction('Hey')">Call extenal function</button>
</div>

答案 1 :(得分:1)

我不建议将AngularJS代码与旧版JS代码混合使用。在您的情况下,如果Test()是您经常使用的某种函数,我会将其封装在服务中并将其注入您的控制器

angular.module('MyModule')
    .factory('Utilities', function ($window) {
        return {
           Test : function() {
                $window.alert('Blah blah');
            }
        };
    });

然后在你的控制器中

angular.module('MyModule', [])
    .controller('MyController', function ($scope, Utilities) {
    $scope.myfunction = function (data) {
        Utilities.Test();
    };
 });

这是纯粹的AngularJS方法

答案 2 :(得分:0)

是的,您可以使用外部或内部java脚本的功能,但这在角度控制器中混合功能并不好。 如果您仍然需要它,您可以创建服务,通过服务,您可以调用外部java脚本方法。

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

app.service('MyService', function() {

    this.callAlert = myTest();

});

app.controller('MainCtrl', function($scope, MyService) {
  $scope.name = 'World';

  $scope.callService = MyService.callAlert;
});


function myTest(){
  alert('Hello world');
}

这是plunker链接 Plunker Demo