2015-11-10 4 views
0

У меня есть 2 функции в одном контроллере, и я пытаюсь передать значение из одной функции в другую. Но я получаю 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(); 
... 
} 

Дон» Я знаю, где я ошибаюсь.

+0

Вы пытались написать свою первую функцию как ct.activeDataset = function() {return ct.datasetName; }; а потом после этого позвоните? – ivamax9

+0

И btw, вы должны передать ct в fn1, а затем вызвать activeDataset() на этом ct. – ivamax9

+0

как я могу передать ct в f1? ct - моя переменная области для второй функции –

ответ

0

Здесь несколько вещей не так.

Первый заключается в том, что функции Controller1 и fn1 определяются в глобальном пространстве имен. Если бы другой модуль использовал одни и те же имена функций, возникли бы проблемы. Мы называем это глобальное загрязнение пространства имен, и его следует избегать.

Вторая проблема заключается в том, что в Controller1 значение this не определено до тех пор, пока функция не будет вызвана. И когда он вызывается, он устанавливается в локальный контекст, когда он был вызван. Прикрепление свойств к this в вызове функции не делает их доступными как глобальное свойство функции. Вот почему вы получаете «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(); 
       }; 
}]); 
Смежные вопросы