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/
我还在 Ottawa AngularJS 小组的幻灯片中展示了这一点(直接跳到最后 2 张幻灯片)
http://www.slideshare.net/peterdrinnan/angular-for-legacyapps