如何在同一范围内的函数之间传递值

时间:2015-11-10 21:59:12

标签: angularjs

我在同一个控制器中有2个函数,我试图将a值从一个函数传递给另一个函数。但我得到一个错误TypeError:无法读取属性' activeDataset'未定义的

这是我的代码:

angular.module('daModule').controller("Controller1",Controller1);
    Controller1.$inject = ['$scope', '$timeout'];
function Controller1($scope, $timeout) {
var ct = this;
ct.datasetName = "demo";
...
ct.activeDataset = function activeDataset(){
            return ct.datasetName;

        };
}

这是我在同一档案中的另一个功能

function fn1(Controller1) {
...
var currentDataSet = Controller1.activeDataset();
...
}

不知道我哪里出错了。

1 个答案:

答案 0 :(得分:0)

这里有一些问题。

一个是在全局名称空间中定义函数Controller1fn1。如果另一个模块使用相同的函数名称,则会出现问题。我们称之为全球名称空间污染,应该避免使用。

第二个问题是在Controller1中,this的值直到调用函数后才定义。当它被调用时,它被设置为调用它的本地上下文。在函数调用中将属性附加到this不会使它们可用作函数的全局属性。这就是为什么你得到'#dat; activeDataset undefined"在fn1

回答关于如何在同一范围内的函数之间传递值的问题:函数需要在控制器内部,并且应该将这些值放在$scope上。

angular.module("myApp").controller("myController", [$scope, myController($scope){
    $scope.datasetName = "demo";
    $scope.activeDataSet = function(){
                     return $scope.datasetName;
                 };
    $scope.fn1 = function() {
                     return $scope.activeDataSet();
                 };
}]);