【发布时间】:2016-07-29 18:40:54
【问题描述】:
我正在尝试将值从 swift 传递给 angularJS。 下面是调用javascript函数的swift代码:
let userScriptSetToTrue = WKUserScript(
source: "setTrackingToggleToTrue();",
injectionTime: WKUserScriptInjectionTime.AtDocumentEnd,
forMainFrameOnly: true
)
contentController.addUserScript(userScriptSetToTrue)
...
let js = "setTrackingToggleToTrue();"
self.webView?.evaluateJavaScript(js) {
(_, error) in print(error)
}
然后javascript调用角度控制器函数:
<script>
function setTrackingToggleToTrue() {
angular.element(document.getElementById('trackingToggle')).scope().setTracking(true);
}
</script>
但我在 javascript 端收到以下错误:
TypeError: undefined is not an object (evalating 'angular.element(document.getElementById('trackingToggle')).scope().setTracking')
似乎 document.getElementById('trackingToggle') 不可用,但我可以在 safari 网络检查器元素选项卡中看到以下内容
<div class="list-group-item">
<tracking-toggle-button
id="trackingToggle"
state="trackingEnabled"
class="pull-right"
on-toggle="updateTrackingPreference(newState);">
</tracking-toggle-button>
<label class="tracking-label">My Location</label>
</div>
这个错误的原因是什么?还是有更好的方法将值从 swift 一直传递到角度控制器?
更新 Angular 应用程序使用 UI 路由并根据路由从不同模板加载页面内容。后来我发现函数 setTrackingToggleToTrue() 在其模板加载之前被调用,因此在函数调用时没有 trackingToggle 可用。是否有另一种方法可以在不引用任何文档元素的情况下在控制器外部调用角度函数?
谢谢。
【问题讨论】:
-
试试 angular.element(document).find('trackingToggle') 代替
document.getElementById('trackingToggle') -
我仍然遇到同样的错误:`undefined is not an object (evalating 'angular.element(document).find('trackingToggle').scope().setTracking')
标签: javascript angularjs swift