繁体   English   中英

角'this'在指令控制器中不起作用

[英]Angular 'this' not working inside directive controller

我有以下代码。 vm.name为什么不起作用? 为什么未检测到控制器内部的this 我没有为指令定义封闭scope吗?

我究竟做错了什么?

var mod = angular.module('myApp', []);

mod.directive('myObj', myObject);

function myObject(){
  return {
      restrict: 'E',
      templateUrl: 'my-obj.html',
      scope: {},
      controller: myController
  };

  function myController(){
    var vm = this;

    vm.name="vfdfbdn";
  }
}

要在controller内部指令中使用this命令,您需要使用controllerAs: 'ctrl'但是在模板中,您将需要在所有名称前加上{{ctrl.name}}前缀,或者可以使用$ scope像这样:

function myController($scope) {
    $scope.name="vfdfbdn";
}
function myObject(){
  return {
      restrict: 'E',
      template: '<div>{{c.name}}</div>',
      scope: {},
      controller: myController,
      controllerAs: 'c'
  };

  function myController(){
    var vm = this;

    vm.name="vfdfbdn";
  }
};

请参阅此问题以了解内容

尝试这个:

function myObject() {
    return {
        restrict: 'E',
        templateUrl: 'my-obj.html',
        scope: {},
        bindToController: true,
        controller: myController
    };
}


myController.$inject = ['$scope'];

function myController($scope){
  var vm = this;
  vm.name="vfdfbdn";}

您需要告诉Angular您将如何从视图中的控制器引用this

function myObject(){
  return {
      restrict: 'E',
      templateUrl: 'my-obj.html',
      scope: {},
      controller: myController,
      controllerAs: 'ctrl'
  };
}

现在,您可以引用分配给this所有内容,即您在控制器中使用ctrl命名为vm

我使用ctrl来显示在视图中用来引用它的名称(由controllerAs设置)与您在控制器函数中this的名称之间没有关联。 用不同的controllerAs引用来引用不同的控制器是很正常的,因此现在您可以在视图中引用它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM