Misko给出了正确的答案(显然),但我们中的一些新手可能需要进一步简化。
如果要从旧版应用程序中调用AngularJS代码,请将AngularJS代码视为存在于旧版应用程序中受保护容器中的“微应用程序”。您不能直接调用它(有很好的理由),但您可以通过$scope对象进行远程调用。
若要使用 $scope 对象,需要获取 $scope 的句柄。幸运的是,这很容易做到。
您可以使用AngularJS“微应用”HTML中任何HTML元素的id来获取AngularJS应用程序$scope的句柄。
例如,假设我们想在AngularJS控制器中调用几个函数,例如sayHi()和sayBye()。在AngularJS HTML(视图)中,我们有一个id为“MySuperAwesomeApp”的div。您可以使用以下代码与 jQuery 结合使用来获取$scope句柄:
var microappscope = angular.element($("#MySuperAwesomeApp")).scope();
现在,您可以通过作用域句柄调用您的 AngularJS 代码函数:
// we are in legacy code land here...
microappscope.sayHi();
microappscope.sayBye();
为了使事情更方便,您可以使用函数随时获取作用域句柄:
function microappscope(){
return angular.element($("#MySuperAwesomeApp")).scope();
}
然后,您的调用将如下所示:
microappscope().sayHi();
microappscope().sayBye();
您可以在此处看到一个工作示例:
http://jsfiddle.net/peterdrinnan/2nPnB/16/
我还在渥太华AngularJS组的幻灯片中展示了这一点(只需跳到最后2张幻灯片)
http://www.slideshare.net/peterdrinnan/angular-for-legacyapps