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;
}