2016-11-22 8 views
0

Я хочу получить доступ или, скорее, использовать переменную, которая была изменена и инициализирована в моем контроллере вне этого контроллера в качестве обычной переменной.Доступ к переменному внешнему контроллеру в angularjs

здесь контроллер:

my.app.controller('queryCtrl', ['$scope','$http',function($scope,$http){ 
var tempAstData={ 
    'rightNode': 'longitude = 72.8604836', 
    'leftNode': { 
     'rightNode': 'latitude = 19.1738427', 
     'leftNode': "fence_brand_name = 'taco'", 
     'centerOperator': 'AND' 
    }, 
    'centerOperator': 'AND' 
} 
// some functions on it 
}]); 
//normal javascript 
// want to use tempAstData here as plain java script in this same file.... 
//this part is not a controller or anyway related t angular js . This is plane java script. 

Я новичок в угловатый, любая помощь ценится ти.

+1

с вашей переменной tempAstData не является угловой sc ope, вы можете определить его в глобальном масштабе и использовать в любом месте через –

+0

. Вы можете определить свою переменную вне своего контроллера, чтобы таким образом вы могли либо получить доступ к ней из области управления, либо над ней. – floribon

+0

Возможно, вы захотите использовать '$ rootScope', чтобы он мог быть глобально доступен по всему вашему приложению или хотите попробовать использовать' factory' или 'service', а затем вставить его любому контроллеру, который вы хотите использовать – vistajess

ответ

0

Как отметил @Subhash в комментарии в этом вопрос у него есть 3 метода assync в вашем контроллере. Затем он должен манипулировать переменную tempAstData после этого assync методы:

@trichetriche У меня есть 3 метода ASYN в моих контроллеров хитов сервер с запросом POST. Я не отправлял его здесь, чтобы избежать complications.To быть точным, я хочу, чтобы получить доступ к этому tempAstData в моем HTML файл с тег сценария нового Treant (tempAstData)

В этом случае я предлагаю использовать $q для ждать все обещания и после этого вызвать метод, который манипулирует tempAstData, как это:

my.app.controller('queryCtrl', ['$scope','$http', '$q',function($scope, $http, $q) { 

    var wrapMethod = function (parameter) { 
     // do something with parameter 
    } 

    var tempAstData={ 
     'rightNode': 'longitude = 72.8604836', 
     'leftNode': { 
      'rightNode': 'latitude = 19.1738427', 
      'leftNode': "fence_brand_name = 'taco'", 
      'centerOperator': 'AND' 
     }, 
     'centerOperator': 'AND' 
    } 

    var promises = []; 

    // add promises returned by assync methods to a array 
    promises.push(assyncMethod1()); 
    promises.push(assyncMethod2()); 
    promises.push(assyncMethod3()); 


    // wait all promises to be resolved 
    $q.all(promises).then(function() { 

     // call wrap method with 'normal' JavaScript code previously in a script tag 
     wrapMethod(tempAstData); 

    }) 

}]); 

@Subhash Пожалуйста, измените свой вопрос и добавить полную информацию для разъяснения еще пользователей

0
var myGlobalVariable = null; 
my.app.controller('queryCtrl', ['$scope','$http',function($scope,$http){ 
var tempAstData={ 
    'rightNode': 'longitude = 72.8604836', 
    'leftNode': { 
     'rightNode': 'latitude = 19.1738427', 
     'leftNode': "fence_brand_name = 'taco'", 
     'centerOperator': 'AND' 
    }, 
    'centerOperator': 'AND' 
} 

myGlobalVariable = tempAstData; 
// some functions on it 
}]); 

alert(myGlobalVariable); 

//normal javascript 
// want to use tempAstData here as plain java script in this same file.... 
//this part is not a controller or anyway related t angular js . This is plane java script. 
+0

Использование глобальных переменных не является правильным решением. Вы никогда не должны выставлять ничего с глобальными переменными. –

+0

, и таким образом окно предупреждения отобразит нуль. Поскольку javascript и угловые оба являются асинхронными. – Subhash

+0

Я не сказал, что это была правильная вещь @ChandraPrakashVariyani. Я просто даю ему ответ. И Сухаш, ты попробовал? Потому что здесь нет методов асинхронизации. – trichetriche

0

использование $rootScope для обращения к данным по всему миру в угловом образом

my.app.controller('queryCtrl', ['$scope','$http','$rootScope',function($scope,$http,$rootScope){ 

var tempAstData={ 
    'rightNode': 'longitude = 72.8604836', 
    'leftNode': { 
    'rightNode': 'latitude = 19.1738427', 
    'leftNode': "fence_brand_name = 'taco'", 
    'centerOperator': 'AND' 
    }, 
    'centerOperator': 'AND' 
    } 

$rootScope.tempAstData = tempAstData; 
// some functions on it 
}]); 

, то вы можете использовать $rootScope.tempAstData с другими контроллерами

my.app.controller('otherCtrl', ['$scope','$http','$rootScope',function($scope,$http,$rootScope){ 
console.log($rootScope.tempAstData) 
}) 
+0

Я не хочу использовать его в другом контроллере. Я хочу использовать его вне этого контроллера как плоскость javascript. Я использую библиотеку визуализации дерева treant.js, которая требует json в определенном формате. Итак, обработайте его в своем контроллере и захотите использовать эти данные. Поскольку библиотека treant.js написана исключительно в javascript, использование как угловых, так и треантов затруднено. – Subhash

+0

сделайте из него простую переменную, сначала классическую «var tempAstData = null», затем ссылайтесь на нее внутри вашего контроллера, а затем вы можете использовать ее для визуализации дерева – vistajess

Смежные вопросы