2014-10-07 56 views
0

我已经使用托管Silverlight控件的AngularJs构建了我的网页。现在我需要调用Silverlight中的控制器角度函数。这是我的控制器的角度代码示例:通过Silverlight控件调用角度js方法

var myModule= angular.module('MyModule', []); 

    myModule.controller('MainController', ['$rootScope', '$scope', '$http', function ($rootScope, $scope, $http) { 

     var _self = this; 
     _self.testMethodForSilverlight = function (message) 
     { 
      alert("message: " + message); 
     }; 
}]); 

,这是我的Silverlight视图模型代码:

public class ViewModel : ViewModelBase, INotifyDataErrorInfo 
    { 
     public void CallAngularMethod() 
     { 
      HtmlPage.Window.Invoke("testMethodForSilverlight ", new[] { "Testing" }); 
     } 
    } 

不幸的是,当我调用该方法返回错误的是(“未能调用:testMethodForSilverlight” )。 有没有人有任何想法?

回答

1

您可以尝试编写自定义JavaScript代码,做这样的事情

<script type="text/javascript"> 
function callAngularFunc(message) { 
    angular.element($("#elementID")).scope().testMethodForSilverlight(message); 
} 
</script> 

这里,elementID将是DOM元素的角度控制器势必。

有更多信息访问来自外部的角度数据in this post

然后,在你的Silverlight代码,拨打电话这样

public class ViewModel : ViewModelBase, INotifyDataErrorInfo 
    { 
     public void CallAngularMethod() 
     { 
      HtmlPage.Window.Invoke("callAngularFunc", new[] { "Testing" }); 
     } 
    } 
+0

谢谢,很好的解决方案。我还发现了一个不太角度的解决方案。你可以声明一个没有'$ scope'或没有'this'的方法,这个方法将是全局的。但是你的解决方案更好。非常感谢你 – Davide 2014-10-08 13:21:00

+0

很高兴它帮助你。祝你好运!谢谢。 – 2014-10-08 16:35:52