从同一控制器内的函数调用函数

时间:2016-06-27 12:04:58

标签: javascript angularjs

所以我试图从function拨打another function。它们都在同一个Controller内定义。但到目前为止,我已尝试过的所有内容都是"funtion is not defined"。如何正确地做这件事?

angular.module('App')

.controller('Controller', ['$http', '$scope', function($http, $scope) {

    this.getSomething1 = function() {};

    this.getSomething2 = function() {
        if (1 == 1) {
            getSomething1();
        }
    };
}]);
  

ReferenceError:未定义getSomething1

4 个答案:

答案 0 :(得分:8)

你需要致电this.getSomething1(),但有一个问题。

这里的问题是函数内的this并不总是与this之外的this相同。因此,为了安全起见,将控制器angular.module('App') .controller('Controller', ['$http', '$scope', function ($http, $scope) { var vm = this; vm.getSomething1 = function () { }; vm.getSomething2 = function () { if(1 == 1){ vm.getSomething1(); } }; } ]); 保存在变量中并使用它来调用函数:

angular.module('App')

.controller('Controller', ['$http', '$scope', function ($http, $scope) {
    angular.extend(this, { getSomething1: getSomething1, getSomething2: getSomething2 });
    return;

    function getSomething1() {
    };

    function getSomething2()  {
        if(1 == 1){
            getSomething1();
        }
    };
}
]);

可以使代码更清晰的另一个选择是始终使用命名函数。你仍然可以暴露它们需要在控制器上暴露的任何一个,但你也可以直接调用它们。

extend

这也有利于在控制器顶部分离初始化代码,而不是通过函数声明将其分散。

如果您可以使用ES2016语法,则angular.extend(this, { getSomething1, getSomething2 }); 调用看起来更清晰:

angular.module('App')

.controller('Controller', ['$http', '$scope', function ($http, $scope) {
    var scope = $scope
    scope.getSomething1 = function () {
    };

    scope.getSomething2 = function ()  {
        if(1 == 1){
            scope.getSomething1();
        }
    };
}
]);

答案 1 :(得分:6)

尝试在控制器中使用范围变量而不是

(function() {
  'use strict';

  angular
    .module('App')
    .controller('Controller', Controller);

  /** @ngInject */
    function Controller($http, $scope) {

        var scope = $scope
        scope.getSomething1 = function () {
        };

        scope.getSomething2 = function ()  {
            if(1 == 1){
                scope.getSomething1();
            }
        };
    }


})();    

您还可以使用函数语法声明控制器,

x=np.array([10,25,50,100,150,200,250,400,500,750,1000])
y=np.array([[8.18330674e-10,1.20275439e-09,1.34761451e-09,1.39233456e-09,
             1.39826787e-09,1.39951392e-09,1.39984821e-09,1.40000430e-09,
             1.40001260e-09,1.40001474e-09,1.40001482e-09]])

答案 2 :(得分:0)

使用$scope代替this

angular.module('App')

.controller('Controller', ['$http', '$scope', function($http, $scope) {

    $scope.getSomething1 = function() {};//<=== use of $scope

    this.getSomething2 = function() {
        if (1 == 1) {
            $scope.getSomething1(); //<=== use of $scope
        }
    };
}]);

这样,您可以在控制器中使用getSomething1方法(在js中)和您使用控制器的网页本身(以html格式)

答案 3 :(得分:0)

您可以尝试使用$ scope代替它。

angular.module('App')

.controller('Controller', ['$http', '$scope', function($http, $scope) {

    $scope.getSomething1 = function() {};

    $scope.getSomething2 = function() {
        if (1 == 1) {
            $scope.getSomething1();
        }
    };
}]);