2014-10-07 57 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