所以我试图从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
答案 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();
}
};
}]);