2016-07-19 4 views
0

Я изучаю AngularJS 1 прямо сейчас и запутался в области и контроллерах. Я не понимаю, почему мой контроллер имеет доступ ко всем переменным, определенным в контроллере, который контролирует представление, в котором была размещена директива, учитывая, что я ввел в свою директиву пустую область выделения, а также bindToController, который ссылается только на одну из переменных контроллера представления.Как управлять совместным использованием/блокировкой данных между Угловым директивным контроллером и контроллером представления директива размещается внутри

index.html

<!doctype html> 
<html ng-app="app"> 
    <head> 
     <meta charset="utf-8"> 
     <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
     <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous"></head> 
    </head> 

    <body> 
    <div ng-controller='MainController as ctrl'> 
     <div class="container"> 
     <basic-directive id= "ctrl.here"></basic-directive> 
     </div> 
    </div> 

    <script src="js/angular.js"></script> 
    <script src="js/app/app.js"></script> 
    <script src="js/app/controllers/MainController.js"></script> 
    <script src="js/app/directives/basicDirective.js"></script> 

    </body> 
</html> 

MainController.js

function MainController() { 
    ctrl = this; 
    ctrl.here = "Hello World"; 
    ctrl.nowhere = "Hello Nowhere"; 
};  

angular 
    .module('app') 
    .controller('MainController', MainController); 

basicDirective.js

function basicDirective() { 
    return { 
    scope: {}, 
    template: [ 
    '<p>{{ basic.id }} </p>', 
    '<p>{{ basic.there }} <p>', 
    '<p>{{ basic.somewhere }}</p>' 
    ].join(""), 

    controller: function() { 
     dr = this; 
     dr.there = ctrl.here 
     dr.somewhere = ctrl.nowhere 

    }, 

    controllerAs: "basic", 
    bindToController: {id: "="} 
    } 
} 

angular 
    .module('app') 
    .directive('basicDirective', basicDirective); 

, который делает:

<basic-directive id="ctrl.here" class="ng-isolate-scope"> 
    <p class="ng-binding">Hello World </p> 
    <p class="ng-binding">Hello World </p> 
    <p class="ng-binding">Hello Nowhere</p> 
    </basic-directive> 

Мое настоящее понимание до сих пор ожидало, что только первый «Hello World» отобразит, потому что это единственный, который я привязал к контроллеру моей директивы. Очевидно, что чего-то не хватает. Может кто-нибудь объяснить? И есть ли какая-либо практическая разница между dr.there и dr.id в моем контролере?

p.s. Имейте в виду, что для целей публикации здесь я упростил свой код, чтобы иметь дело только с этой проблемой, поэтому директива, как написано, определенно очень надуманна.

ответ

0

Кто-то любезно указал мне, что я забыл объявить свои переменные, и в результате моя переменная ctrl подняла себя. Изменение ctrl = this на var ctrl = this внутри моего MainController решило проблему, и теперь моя директива ведет себя точно так, как я ожидал.

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

  • Нет связанных вопросов^_^