在指令中抛出异常后,不显示消息

时间:2016-04-26 10:16:52

标签: angularjs angularjs-directive

我有一个用户可以签名的签名组件。此组件在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,它就会表现正常。

任何帮助都可以找到原因,或者更好地解决问题:)

0 个答案:

没有答案