2016-10-31 6 views
0

У меня возникла следующая проблема.Угловая директива и область применения

У меня есть следующий код на мой взгляд

<a class="btn btn-hero" confirmation-download-all 
ng-if="downloadPackageLink"><i class="fa fa-download" aria-hidden="true"></i> {{signDocumentDownloadAllButton}}</a> 

и у меня есть директиву

function confirmationDownloadAll(deviceDetector) { 
    return { 
     restrict : 'A', 
     priority : 1, 
     terminal : true, 
     scope : { 
      signDocumentDownloadAllButton : '=', 
     }, 
     link : function (scope, element, attr) { 
      var clickAction = attr.ngClick; 
      element.bind('click', function (event) { 
       event.preventDefault(); 
       if (scope.deviceDetector.os == 'ios') { 
        var sweetOptions = { 
         title : scope.signDocumentDownloadAllNotificationTitleIOS, 
         text : scope.signDocumentDownloadAllNotificationMessageIOS, 
         type : "warning", 
         showCancelButton : false, 
         confirmButtonColor : "#DD6B55", 
         confirmButtonText : scope.signDocumentDownloadAllButton, 
         closeOnConfirm : true 
        }; 
        swal(sweetOptions, 
         function (isConfirm) { 
         if (isConfirm) { 
          var downloadall = document.getElementById('hidden_downloadall'); 
          downloadall.click(); 
          //if (sweetConfirmOption) swal(sweetConfirmOption); 
          //if (attrs.sweetOnConfirm) scope.$evalAsync(attrs.sweetOnConfirm); 
         } 
        }); 
       } else { 
        var downloadall = document.getElementById('hidden_downloadall'); 
        downloadall.click(); 
       } 
      }); 
     } 
    }; 
} 

И моя проблема заключается в том, что на мой взгляд, текст, показывающий в кнопок {{signDocumentDownloadAllButton}}, вместо от $scope. signDocumentDownloadAllButton

Я считаю, что должно быть очень просто, но я начинаю отступать.

+0

Откуда вы получаете 'scope.deviceDetector'? Вы не перечисляете это как часть своего блока «scope» вообще. – Makoto

+0

Я поставил ваш код на jsfiddle [здесь] (https://jsfiddle.net/cLe9kxd4/16/) и там много ошибок. deviceDetectotr не является сервисом. Я не понял, почему это связано с scope.deviceDetector. Я удалил это, но не работал. Есть ли ошибка в консоли? –

ответ

-1

Здесь вы идете ....... Пробуйте этот комментарий указывает, где ваши изменения должны быть.

function confirmationDownloadAll(deviceDetector) { 
return { 
    restrict : 'A', 
    priority : 1, 
    terminal : true, 
    scope : { 
     signDocumentDownloadAllButton : '=', 
    }, 
    // you missed the below line $scope and not just scope 
    link : function ($scope, element, attr) { 
     var clickAction = attr.ngClick; 
     element.bind('click', function (event) { 
      event.preventDefault(); 
      if ($scope.deviceDetector.os == 'ios') { 
       var sweetOptions = { 
        title : $scope.signDocumentDownloadAllNotificationTitleIOS, 
        text : $scope.signDocumentDownloadAllNotificationMessageIOS, 
        type : "warning", 
        showCancelButton : false, 
        confirmButtonColor : "#DD6B55", 
        confirmButtonText : $scope.signDocumentDownloadAllButton, 
        closeOnConfirm : true 
       }; 
       swal(sweetOptions, 
        function (isConfirm) { 
        if (isConfirm) { 
         var downloadall = document.getElementById('hidden_downloadall'); 
         downloadall.click(); 
         //if (sweetConfirmOption) swal(sweetConfirmOption); 
         //if (attrs.sweetOnConfirm) $scope.$evalAsync(attrs.sweetOnConfirm); 
        } 
       }); 
      } else { 
       var downloadall = document.getElementById('hidden_downloadall'); 
       downloadall.click(); 
      } 
     }); 
    } 
}; 
} 
+0

В директиве обычно используется 'scope' для представления объекта области видимости вместо' $ scope', который представляет сервис. Кроме того, я не уверен, что инъекция 'deviceDetector' выполнит * что угодно * в этом сценарии, так как очень неясно, откуда это происходит. – Makoto

Смежные вопросы