2016-03-21 2 views
0

В приведенном ниже коде,Синтаксис для доступа к переменной rootScope в MyController

<!DOCTYPE html> 
    <html> 
     <head> 
      <meta charset="UTF-8"> 
      <title></title> 
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> 
      <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.20/angular.js"></script> 
      <script type="text/javascript"> 

       function MyController() { 
        this.Name = "jag"; 
        this.sal = "4500"; 
       } 

       MyController.prototype.getAnnualSal = function(){ 
         return (this.sal) * 12; 
       } 
       var app = angular.module("sample", []).run(function($rootScope) { 
                   $rootScope.variable = 1; 
                  }); 
       app.controller("emp", MyController); 

      </script> 
     </head> 
     <body ng-app="sample"> 
      <div ng-controller="emp as o" > 
       Hello {{o.Name}}, your annual salary is {{o.getAnnualSal()}} 

      </div> 
     </body> 
    </html> 

Используя run синтаксис, $rootScope.variable вводится в модуль (sample) уровне.

Что такое синтаксис для доступа $rootScope.variable в MyController?

ответ

2

Inject rootScope в контроллере, как это.

angular.module('sample', []).controller('emp', function($scope, $rootScope) { 

}; 

Помимо вашего вопроса я не знаю, почему вы смешиваете код контроллера в view.Angular построен на MVVM pattern.So разделение контроллера и вид рекомендуется.

+0

** Один податливые: ** В моем коде Что такое преимущество создания '' name' и sal' как член экземпляра контроллера ('o'), а не членов' $ scope'? FYI .. Я знаю, что экземпляр контроллера является членом '$ scope'. Одна ссылка-http: //codetunnel.io/angularjs-controller-as-or-scope/ – overexchange

+0

Итак, не можем ли мы использовать подобный подход, не введя «$ rootScope» в контроллер? В противном случае, я знал синтаксис, который вы написали в ответ – overexchange

+0

@overexchange: что вы делаете с rootScope? '$ rootScope' не следует использовать для обмена переменными, когда у нас есть такие вещи, как сервисы и фабрики. Однако вы можете использовать' .scope(). $ root' также косвенно получить корневой код; –

0

Вы можете сделать следующее, впрыснуть $ rootScope в контроллер

<script type="text/javascript"> 

      function MyController($rootScope) { 
       this.Name = "jag"; 
       this.sal = "4500"; 
      } 

      MyController.prototype.getAnnualSal = function(){ 
        return (this.sal) * 12; 
      } 
      var app = angular.module("sample", []).run(function($rootScope) { 
                  $rootScope.variable = 1; 
                 }); 

      MyController.$inject = ['$rootScope']; 
      app.controller("emp", MyController); 

</script>