简体   繁体   English

从Javascript调用AngularJS控制器

[英]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控制器。

  1. Load container view(v1.html), main script (eg. myscript.js) and angular.js 加载容器视图(v1.html),主脚本(例如myscript.js)和angular.js
  2. myscript.js will load view(v2.html) inside v1.html and angular controller(controller.js) myscript.js将在v1.html和angular controller(controller.js)中加载视图(v2.html)
  3. v2.html is as: <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>
  4. controller.js is as: controller.js如下:

 angular.module('loadApp', []).controller('loadCtrl', function($scope) { $scope.load_msg = function(_msg) { $scope.msg = _msg; } }); 

  1. Call to controller within myscript.js : 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM