我有一个用户可以签名的签名组件。此组件在iOS应用程序中用作WebView。 当用户放置他的签名时,我想通知iOS客户端签名是否存在。
为了目的,我有以下指令(Modules.registerDirective()
是一个辅助函数来创建指令)
Modules.registerDirective('signatureClientNotifier', ($window:ng.IWindowService) => {
return {
scope: {
isSignatureValid: '@',
},
restrict: 'A',
link: function (scope, element, attrs) {
scope.$watch('isSignatureValid', function (value) {
if (value === 'true') {
try {
$window['webkit'].messageHandlers.signatureIsReady.postMessage({'platform': 'iOs'});
} catch (e) {}
}
});
}
}
});
以下是我在视图中使用此指令的方法
<span class="success" ng-show="signatureController.isSignatureValid"
signature-client-notifier
is-signature-valid="{{signatureController.isSignatureValid}}">Success</span>
到目前为止一切顺利,实际上这是有效的,iOS客户端会收到有关成功的通知。除此之外,我想在视图中显示Success
消息。
问题在于,在正常的Web应用程序中$window['webkit']
未定义,因此抛出异常(因此try...catch
)。虽然我捕获了异常,但Success
消息未在我span
内的异常后显示。如果我从span
删除指令,一切都按预期工作。
更新:看起来原因实际上并不是一个例外,但有些东西搞乱了范围。如果我从指令中删除scope
,它就会表现正常。
任何帮助都可以找到原因,或者更好地解决问题:)