[英]Call AngularJs controller function from Java android
我试图从我的Java代码中调用控制器范围内的函数。 在Google中进行了大量搜索之后,我发现此代码可以从Java代码调用Js函数,但是我无法直接调用我的控制器函数。
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.addJavascriptInterface(jsInterface, "JSInterface");
myWebView.loadUrl("javascript:"+functionName);
最后,我能够从Java调用Js函数。 现在我想从不在控制器中的其他函数调用我的控制器函数。 我尝试下面的代码从外部调用AngulrJs控制器函数。
var scope = angular.element(document.getElementById("messageList")).scope();
scope.$apply(function(){
scope.number = '345';
scope.message = 'Shan';
scope.addItem();
})
但是此代码导致以下错误
Uncaught TypeError: Cannot read property '$apply' of undefined
我尝试$ apply和safeApply都无法正常工作。 我是AngularJs的新手,任何建议对我都会有所帮助。
HTML代码:
<div id="mainContainer" ng-controller="MainCtrl">
<ion-nav-view></ion-nav-view>
</div>
<script id="message.html" type="text/ng-template">
<ion-view title="Message">
<ion-content>
<div id="messageList" ng-controller="MessageCtrl">
<ion-list>
<ion-item ng-repeat="item in items">
{{item.number}} - {{item.message}}!
</ion-item>
</ion-list>
</div>
</ion-content>
</ion-view>
</script>
您不能在您的作用域var上调用$ apply,您可以这样做:
var scope = angular.element(document.getElementById("messageList")).scope().addItem();
这是您访问功能的方式。
如果在调用非角度函数时未及时加载目标视图,则也将不会加载控件,因此一种解决方案是使用“ ng-controller ='yourMagicController”'隐藏元素,然后您总是可以得到那个功能。 另一种方法是使用$ injector。 – HelloWorld 7月20日22:59
这种方法解决了我的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.