[英]Call AngularJS controller from Javascript
I am loading views and scripts on client side. 我在客户端加载视图和脚本。 I am trying to achieve to load and call angularjs controller inside my javascript. 我试图在我的javascript中加载并调用angularjs控制器。
<div id="v1_id" ng-app="loadApp" ng-controller="loadCtrl"> {{msg}} </div>
. v2.html如下: <div id="v1_id" ng-app="loadApp" ng-controller="loadCtrl"> {{msg}} </div>
。 angular.module('loadApp', []).controller('loadCtrl', function($scope) { $scope.load_msg = function(_msg) { $scope.msg = _msg; } });
angular.element(document.getElementById('v1_id')).scope().load_msg('Hi')
在myscript.js中调用控制器: angular.element(document.getElementById('v1_id')).scope().load_msg('Hi')
And error I get is Uncaught TypeError: Cannot read property 'load_msg' of undefined
. 我得到的错误是Uncaught TypeError: Cannot read property 'load_msg' of undefined
。
Any thought on this, what I am missing here? 有什么想法,我在这里缺少什么?
Many thanks. 非常感谢。
You probably haven't wait for angular to have bootstrapped (compiled) your HTML, hence the scope is not available. 您可能没有等到angular引导(编译)HTML,因此范围不可用。 Use angular.element(document).ready
before running your javascript. 在运行javascript之前使用angular.element(document).ready
。
angular.module('loadApp', []).controller('loadCtrl', function($scope) { $scope.load_msg = function(_msg) { $scope.msg = _msg; } }); // Wait for angular to be bootstraped angular.element(document).ready(function () { var scope = angular.element(document.getElementById('v1_id')).scope(); // Since we are outside of angular world, we need to $apply the scope scope.$apply(function() { scope.load_msg('Hi'); }); });
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> <div id="v1_id" ng-app="loadApp" ng-controller="loadCtrl"> {{msg}} </div>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.