27

ここでJohn Papa の angularJS スタイル ガイドに従おうとしており、ディレクティブを controllerAs を使用するように切り替え始めています。ただし、これは機能していません。私のテンプレートは、vm に割り当てられたものにアクセスできないようです。動作を示すこの非常に単純な plkr の例を参照してください。

http://plnkr.co/edit/bVl1TcxlZLZ7oPCbk8sk?p=preview

angular
    .module('app', []);

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

function test() {
    return {
        restrict: 'E',
        template: '<button ng-click="click">{{text}}</button>',
        controller: testCtrl,
        controllerAs: 'vm'
    }
}

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

function testCtrl() {
  var vm = this;
  vm.text = "TEST";
}
4

5 に答える 5

4

「controllerAs」を使用すると、コントローラーインスタンスのエイリアス(この場合は)がスコープのプロパティvmとしてスコープで公開されます。.vm

したがって、そのプロパティ (つまり、コントローラのプロパティ) にアクセスするには、{{vm.text}}またはを指定する必要がありますng-click="vm.click"

于 2015-08-06T14:02:53.453 に答える
1

controllerAs構文 を使用する場合は、使用する必要があります

bindToController: true

それはあなたのディレクティブで機能します。

于 2017-01-09T05:48:25.730 に答える
1

' controllerAs ' 構文を使用する場合、上記のように、スコープはコントローラーの ' this ' 参照にバインドされます。したがって、追加のオブジェクト リテラル ( $scopeなど) にスコープ プロパティを配置する必要なく、コントローラーにバインドされた新しい名前空間 (ここでは'vm' ) を導入できます。したがって、コントローラーのスコープ内の何かにアクセスするには、「vm」名前空間が必要です。

'<button ng-click="click">{{vm.text}}</button>'
于 2017-06-10T17:09:17.547 に答える