2013-11-20 2 views
0

У меня есть настраиваемая директива, которая загружает файл на amazon и содержит callback(onComplete). Когда обратный вызов завершен, я хотел бы добавить значение к $scope контроллера, в котором создана директива. В этом случае объем Invite.

Оба Invite и fineUploader удлиняют тот же угловой модуль.

HTML (упрощенно):

<div ng-controller="Invite" class="apply"> 
    <div fine-uploader ng-switch-when="file" upload-extensions="jpg,jpeg,png,gif"></div> 
</div> 

Директива:

directive('fineUploader', function() { 
    return { 
     restrict: 'A', 
     require: '?ngModel', 
     link: function($scope, element, attributes, ngModel) { 
      $scope.uploader = new qq.s3.FineUploader({ 
       debug: true, 
       element: element[0], 
       request: { 
        endpoint: 'ballentines-bar-project.s3.amazonaws.com', 
        accessKey: 'AKIAIPT6J4T6XZXV3VWA' 
       },callbacks: { 
        onComplete: function(id, fileName, responseJSON) { 
         if (responseJSON.success === true) { 
          console.log(this.getKey(id)); 
          console.log($scope); 
          $scope.test = this.getKey(id); 
         } 
        } 
       }, 
       signature: { 
        endpoint: '/s3/' 
       }, 
       iframeSupport: { 
        localBlankPagePath: '/success.html' 
       }, 
       retry: { 
        enableAuto: true // defaults to false 
       }, 
       deleteFile: { 
        enabled: false 
       }, 
       text: { 
        uploadButton: '<p>Upload File</p>' 
       }, 
       template: 
        '<div class="qq-uploader">' + 
         '<div class="qq-upload-button btn btn-info">{uploadButtonText}</div>' + 
         '<ul class="qq-upload-list" ><h2>Your files</h2></ul>' + 
        '</div>', 
      }); 
     } 
    }; 
}). 

Контроллер

controller('Invite', function(
    $scope, 
    $localStorage, 
    $http 
){ 
    $scope.$storage = $localStorage.$default({ 
     "formkey": "1MRSAWTRl5-PnVEoy3tD63BL3q_v2mnAhtqa9bdZk-zg", 
     "draftResponse": "[]", 
     "pageHistory": "0", 
    }); 
    $scope.liking = liking; 
    $scope.post = function(){ 
     $http.post('/signup.php', $scope.$storage). 
      success(function(data, status, headers, config){ 
       console.log(data); 
     }); 
    }; 
    FB.Event.subscribe('edge.create', 
     function(href, widget) { 
      liking = true; 
     } 
    ); 
}) 
+0

Почему вы используете область выделения aka 'scope: {}'. Директива в этом случае использует частный объем. Попробуйте удалить его –

+0

Хороший вопрос (обновлен), хотя это на самом деле не отвечает на мой вопрос. – Himmators

+0

Можете ли вы разместить соответствующую часть своего контроллера? –

ответ

2

Я хотел бы попробовать, по крайней мере Возможны два варианта:

[1]

изменения scope: {}, в директивы:

`scope: { test: '@'},` 

Это делает метод test видимым в частном объеме.

[2]

Второй вариант попробуйте удалить изолят области действия a.e: scope: {},

+0

Для варианта 2, то что? Я попробовал console.log ($ scope); это все еще кажется неправильным охватом. – Himmators

+0

Вы получаете с отладчиком '$ scope.test = this.getKey (id);' row? –

+0

да, хотя, я бы хотел, чтобы это было в родителях родителей родителей сфера :) – Himmators

2

Вы либо должны передать элементы из родительской области с директивой (через изолированные сферы). Или, как @MaximShoustin говорит и удаляет изолированную область действия из вашей директивы.

Таким образом, вариант 1:

scope: { directiveProperty: '=nameOfAttributeThatContainsParentProperty' }, 

Или, вариант 2:

Удалить изолированную декларацию области действия scope: {}, из директивы. Это позволит директиве расширить сферу охвата ее области.

+0

Для варианта 2, то что? Я попробовал console.log ($ scope); это все еще кажется неправильным охватом. – Himmators

+0

Как вы определяете, что это неправильная область? –

+0

Область, в которой я хочу ссылаться, содержит ключ, называемый $ localStorage (в Угловом отладчике я могу определить, что это родители родителей. – Himmators

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