I';我试图通过JavaScript访问角度变量。但它不起作用

I';我试图通过JavaScript访问角度变量。但它不起作用,javascript,angularjs,Javascript,Angularjs,我用这个: window.onload=function(){ var dom_el2 = document.querySelector('[ng-controller="myCtrl"]'); var ng_el2 = angular.element(dom_el2); var ng_el_scope2 = ng_el2.scope(); console.log(ng_el_scope2); var datan3 = ng_el_scope2.itson

我用这个:

window.onload=function(){
    var dom_el2 = document.querySelector('[ng-controller="myCtrl"]');
    var ng_el2 = angular.element(dom_el2);
    var ng_el_scope2 = ng_el2.scope();
    console.log(ng_el_scope2);
    var datan3 = ng_el_scope2.itson;
    console.log(datan3);
      }

它每次都将itson的值显示为未定义。我几乎已经试过了所有的方法。除了使用$window之外,请推荐一些从javascript访问角度变量的好方法

我完全同意@MikeMcCaughan的说法,这是一种糟糕的做法! 但如果您真的需要这样做,下面是一个简单的示例,其中有一个控制器和一个从外部访问其变量和函数的Vanilla JS

index.html

<!doctype html>

<html lang="en" ng-app="app">
<head>
  <meta charset="utf-8">
  <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.1/angular.min.js"></script>
  <script src="script.js"></script>
</head>

<body>
    <div id="myController" ng-controller="myController as vm">
        My name is {{vm.fullName}}
    </div>
    <br>
    <button onclick="accessControllerScopeVar()">Get full name</button>  
    <button onclick="accessControllerScopeFunction()">Say hello !</button>   
</body>
</html>
这是普朗克:

备选方案

如果您不想使用ID,下面是另一个使用
document.querySelector
的示例:


window.onload()
向下工作到特定范围是一种非常脆弱和不直观的方式。为什么不在一个角度控制器中实现逻辑,比如
myCtrl
(或者在多个控制器中使用逻辑的服务中)?@KonstantinA.Magg我在一个单页应用程序上工作,我在为所有任务使用单控制器。这就是为什么我更喜欢简单一点的方法。请不要这样做。进入AngularJS框架是一种不好的做法,基本上是围绕AngularJS框架进行结束运行,您使用AngularJS框架大概是有原因的。@ShubhamKumarGupta,当您使用单页应用程序时,一定要使用AngularJS的机制。有很多工作,框架可以为你做!
angular.module('app', []);

angular
.module('app')
.controller('myController', ['$scope', function ($scope) {

    var vm = this;

    vm.fullName = 'Marty McFly';

    vm.getFullName = function() {
        return vm.fullName;
    }

}]);

function accessControllerScopeVar() {
    var scope = getScopeFor("myController");
    scope.$apply(function () {
        alert(scope.vm.fullName);
    });
}

function accessControllerScopeFunction() {
    var scope = getScopeFor("myController");
    scope.$apply(function () {
        alert('Hello ' + scope.vm.getFullName());
    });
}

function getScopeFor(id) {
    var el = document.getElementById(id);
    var scope = angular.element(el).scope();
    return scope;
}