繁体   English   中英

从Java android调用AngularJs控制器函数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM