2016-11-03 6 views
0

Как я могу получить доступ к свойствам области управления с помощью моей настраиваемой директивы TypeScript?
, например, в следующем фрагменте кода я хочу войти scope.message:область доступа от директивы с машинописными текстами

/// <reference path="typings/angularjs/angular.d.ts" /> 

//module 
module app { 
    var mainModule = angular.module('mainModule', []); 
} 

//controller 
module app.testCtrl { 
    interface ITest { 
     message: string; 
    } 

    class TestCtrl implements ITest { 
     message: string = 'initial value'; // this is the value i want to access from my dierctive 
    } 
    angular.module('mainModule').controller('testCtrl', TestCtrl); 
} 

//directive 
module app.directives { 
    export class MyDirective implements ng.IDirective { 
     restrict = 'A'; 

     static instance(): ng.IDirective { 
      return new MyDirective; 
     } 

     link(scope: ng.IScope) { 
      //HOW DO I GET TO THE SCOPE PROPERTIES? 
      //console.log(scope.???); 
     } 

    } 
    angular.module('mainModule').directive('myDirective', MyDirective.instance); 
} 

PS - я использую «контроллер как» синтаксис в представлении, если это делает разницу

+0

Пожалуйста, объясните ** почему ** вы хотите это сделать, похоже, вы злоупотребляете им. Вы можете сделать 'console.log (scope.myControllerAsAlias.message), хотя. Но «угловой способ» - передать свойства директиве, а не читать их из контроллера. – devqon

ответ

0

Похоже, вы злоупотребляя понятиями угловых директив. Вы можете получить доступ к переменным области видимости контроллера, если вы делаете что-то вроде этого:

link(scope: ng.IScope) { 
    console.log(scope["myControllerAsAlias"].message); 
} 

Однако, «угловой путь» должен был бы передать переменную в директиве, что-то вроде этого:

interface IMyDirectiveScope extends ng.IScope { 
    message: string 
} 

export class MyDirective implements ng.IDirective { 
    restrict = 'A'; 
    scope = { 
     message: "@" 
    }; 

    static instance(): ng.IDirective { 
     return new MyDirective; 
    } 

    link(scope: IMyDirectiveScope) { 
     console.log(scope.message); 
    } 

} 

И в вашем html:

<div my-directive message="myCtrlAsAlias.message"></div> 
+0

'scope.vm.message' дает свойство« property is not exist error ». 'scope ['vm']. сообщение' работает. вопрос в том, как я могу использовать его (второе предложение) на входе? или, может быть, я должен нацелиться на 'ngModel' вместо этого? также не смог реализовать его ... – Yoav

+0

Пожалуйста, объясните свою цель точно. Этот ответ ответил на ваш вопрос, но кажется, что вы только попросили небольшую часть того, что вы действительно хотите достичь – devqon

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