Javascript 从Java android调用AngularJs控制器函数

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); 最后,我能够从

我试图从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>

{{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元素直接访问控制器?目前我正在尝试通过元素获取控制器作用域。但元素不在视图中,它是模板的一部分。我只想通过控制器名访问控制器函数,可以吗?