0

Имеет еще одну проблему с вычислением углового машинописного текста; на этот раз, когда речь идет о директивах с контроллерами. Попытка передать объект с страницы на директиву, а затем использовать этот объект в контроллере директивы. Возможно, это не правильный подход, но, похоже, это имеет смысл для меня; просто не могу понять, как получить доступ к объекту в контроллере.Угловая + машинописная: Использовать директиву Класс Scope Переменная в классе контроллера

HTML со страницы:

<div> 
    <section> 
     On View: {{ee.obj.name}} 
     <image-upload obj="ee.obj"></image-upload> 
    </section> 
</div> 

шаблон Директива:

<div> 
    On directive: {{obj.name}} 
    On controller: {{iuc.obj.name}} 
    <div class="row"> 
     <div class="col-md-4 text-primary h4"> 
      Add Images 
     </div> 
    </div> 
    <div class="row"> 
     <div class="col-md-3"> 
      <input type="file" multiple ng-model="iuc.imageUploads" ng-change="iuc.uploadImages()" /> 
     </div> 
    </div> 
    <div class="row"> 
     <div class="col-md-3 dropzone"></div> 
    </div> 
</div> 

Директива машинопись:

/// <reference path="../../../scripts/_all.ts" /> 

module ObjConfig { 
    'use strict' 

    export class ImageUpload implements ng.IDirective { 
     static instance(): ng.IDirective { 
      return new ImageUpload(); 
     } 
     restrict = 'E'; 
     replace = true; 
     templateUrl = '../../../../App/AppConfig/Views/Directives/ImageUpload.html'; 
     scope = { 
      obj: '=' 
     }; 
     controller = imageUploadCtrl; 
     controllerAs = 'iuc'; 
    } 

    export class imageUploadCtrl { 
     obj: OBJBase; 
     imageUploads: OBJImage[]; 

     constructor() { 
     } 

     uploadImages() { 
      //THIS IS WHERE I WANT TO ACCESS OBJ 
      //this.imageUploads.forEach((iu) => { this.obj.images.push(iu); }); 
     } 
    } 

    angular.module('ObjConfig').directive('imageUpload', ImageUpload.instance); 
} 

Когда я использую "this.obj" в методе, он возвращается как undefined так очевидно, что контроллер «obj» не получает автоматически подключен к директиве «obj». На ee.obj.name на странице отображается значение, obj.name в верхней части шаблона директивы показывает значение, но iuc.obj.name не показывает значение. Поэтому я пытался найти способ связать директиву obj с контроллером obj, и я попытался использовать функцию ссылки для использования ng.IAttributes, но это не дает мне объекта; это дает мне ee.obj.

Любая помощь была бы принята с благодарностью.

ответ

2

Вы должны быть способны выполнить то, что вы пытаетесь сделать, используя bindToController: true.

Эта функция документирована в $compile documentation, поэтому ее нелегко найти, но она делает то, что вы хотите.

Когда изолят сфера используется для компонента (смотрите выше), и controllerAs используются, bindToController: true позволит компоненту, чтобы его свойство, связанным с контроллером, а не объем. Когда создается экземпляр контроллера, начальные значения привязок области выделения уже доступны.

+1

Большое спасибо! Это точно! Как только я установил этот флаг, мой контроллер obj имеет значение, и я могу использовать его на всем протяжении моего контроллера! – shinsnake

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