Javascript 从Java android调用AngularJs控制器函数
我试图从java代码中调用控制器范围内的函数。 在Google中搜索了很多之后,我发现这段代码可以从Java代码中调用Js函数,但我不能直接调用我的控制器函数Javascript 从Java android调用AngularJs控制器函数,javascript,android,angularjs,controller,scope,Javascript,Android,Angularjs,Controller,Scope,我试图从java代码中调用控制器范围内的函数。 在Google中搜索了很多之后,我发现这段代码可以从Java代码中调用Js函数,但我不能直接调用我的控制器函数 myWebView.getSettings().setJavaScriptEnabled(true); myWebView.addJavascriptInterface(jsInterface, "JSInterface"); myWebView.loadUrl("javascript:"+functionName); 最后,我能够从
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>
{{item.number}}-{{item.message}!
您不能在范围变量上调用$apply,您可以这样做:
var scope = angular.element(document.getElementById("messageList")).scope().addItem();
这是您访问功能的方式
如果调用时没有及时加载目标视图
非角度函数,控制器也不会加载,所以
解决方案是使用一个隐藏元素
“ng controller='yourMagicController'”你总能得到它
功能。另一种方法是使用$injectorHelloWorld 7月20日上午
22:59
这种方法解决了我的问题。。谢谢向后工作一点,
document.getElementById(“messageList”)
定义了吗?事实上messageList是模板的一部分。当你调用代码时,它是否定义了都不起作用?谢谢你的回复..但它不起作用,未捕获类型错误:无法读取未定义的属性“addItem”
该部分可能没有问题。您可以发布更多详细信息,或者从UI侧码发布代码:{{{item.number}}-{{item.message}代码>我认为目标部件尚未加载。实际上,我正在尝试更新控制器,该控制器仅在模板中可用,在视图中不可用。这听起来可能很傻,是否可以不通过DOM元素直接访问控制器?目前我正在尝试通过元素获取控制器作用域。但元素不在视图中,它是模板的一部分。我只想通过控制器名访问控制器函数,可以吗?