2016-06-17 3 views
0

Я хочу изменить значение переменных в html с помощью AngularJS. Для этого я знаю, что OnClick функция может быть вызвана, которая позволит нам изменить значение: Javascript код:AngularJs доступ к области вне другой функции в javascript

var app = angular.module('graphApp', []); 
app.controller('graphAppCtrl', function($scope) { 
    $scope.count = 0; 
    $scope.myFunction = function() { 
     $scope.names= {0:{'Name':'John','Country':'albania'}}; 
     $scope.count++; 
     keyword_type = 1 
     check(); 

    } 
}); 

Теперь я хочу, чтобы изменить значение имен переменных за пределами функции после выполнения некоторых вычислений. Какова процедура для этого?

HTML:

<div id="search-container" ng-app="graphApp" ng-controller="graphAppCtrl"> 
      <tabs id="mainTabs"> 
       <pane title="Name search"> 

        <p>Name: <input type="text" ng-model="name"></p> 
        <button ng-click="myFunction()">Search</button> 
        <table> 
         <tr> 
          <td>Index</td> 
          <td>Name</td> 
          <td>ID</td> 
         </tr> 
         <tr ng-repeat="x in names"> 
          <td>{{ x.Name }}</td> 
          <td>{{ x.Country }}</td> 
         </tr> 
        </table> 

        <p ng-bind="check"></p> 
       </pane> 

получает значение из этой функции:

function WebSocketTest(keyword_or_query,keywordtype) { 

     var object_of_each_pair = []; 

     if ("WebSocket" in window) { 
      //messageContainer.innerHTML = "WebSocket is supported by your Browser!"; 
      var ws = new WebSocket("ws://localhost:8888/websocket"); 
      ws.onopen = function() { 
       var message=[] 
       message = keyword_or_query + 'XXXX' + keywordtype 
       ws.send(message); 
      }; 
      ws.onmessage = function (evt) { 

       var received_msg = evt.data; 
       node_id = received_msg 
      } 
+0

Можете ли вы дать более конкретный пример того, что вы хотите сделать? Что вы пробовали? – Martin

+0

привет, пожалуйста, уточните, когда вы хотите изменить значение, должно произойти какое-то событие, когда значение должно измениться либо при загрузке страницы, либо при нажатии какой-либо кнопки или часто после некоторого события времени. Я хочу точно знать, какое событие вы хотите изменить значение. –

+0

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

ответ

0

(fiddle)


Угловая среды:

app.controller('graphAppCtrl', function($scope) { 
    $scope.some_info = 'foo'; 
}); 

Это, как вы получите scope от внешних угловых сред:

// in your case 
var where_you_put_ng_app = document.getElementById("search-container"); 
var scope = angular.element(where_you_put_ng_app).scope(); 

// from here you can modify your $scope variables 
scope.some_info = '.....'; 
+0

Ошибка: не удается прочитать имена свойств неопределенного значения II, как это выглядит var graphApp = document.documentElement; // IF \t var scope = angular.element (graphApp) .scope(); .names [0] .Name = object_of_each_pair в функции WebSocketTest() –

+0

@ ZohairZahid См. обновленный ответ. –

+0

не могли бы вы рассказать мне, что вы подразумеваете под ** where_you_put_ng_app ** –

0

в случае, если ваш $ scope.myFunction() и WebSocketTest() оба находятся в одном контроллере, то только после получения ответа вы можете назначить значение $ scope.names

в случае оба находятся в другом контроллере, то после получения значения в WebSocketTest(), вы можете использовать $ rootScope. $ вещать как этот

супп новления вы получили свою ценность в

currentVariable//just name of variable 

затем

$rootScope.$broadcast("broadCastonmessage",currentVariable) 
//from here we will broadcast once we got the value 

теперь вы контроллер

$rootScope.$on('broadCastonmessage',function($event,Value){ 
//this part will be executed whenever broadcast is done 
//now value can be assigned to scope variable 
$scope.names =value 
}) 

здесь один простой пример, показывающий, как использовать трансляцию, чтобы назначить измененное переменную в какой-то другой переменная в другом объеме надеется, что она окажется вам полезна

http://codepen.io/vkvicky-vasudev/pen/Eyyzvx

+0

ReferenceError: $ rootScope не определен –

+0

вам нужно обеспечить зависимость rootScope от вашего контроллера –

+0

$ rootScope. $ On ('wideCastonmessage', function (Value) { // эта часть будет выполняться всякий раз, когда ведется трансляция // теперь значение может быть присвоено переменной области видимости $ scope.names = value }) I добавлено это в контроллер –

0

Если я правильно понимаю, вы хотите изменить значения переменных вашего контроллера из-за пределов angularjs, в javascript.

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

  var scope = angular.element($("any class name from your DOM")).scope(); 

       //in order to update the new values to the controller , '$apply' 
       scope.$apply(function() { 
        //here you can call and change any variable from your controller 
        scope.names= {0:{'Name':'xxxx','Country':'xxxx'}}; 
       }); 
+0

Uncaught ReferenceError: $ не определен –

+0

Вам нужен jquery. импортировать его в заголовок –

+0

Спасибо. Теперь еще один probelm: (index): 738 Uncaught TypeError: Не удается прочитать свойство $ apply 'undefined –

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