Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 带外部控制器的角度指令_Angularjs_Angularjs Directive - Fatal编程技术网

Angularjs 带外部控制器的角度指令

Angularjs 带外部控制器的角度指令,angularjs,angularjs-directive,Angularjs,Angularjs Directive,以下是我在创建指令中的博文: 他似乎建议将控制器与指令分开。但是,尝试从链接函数中的外部控制器运行函数会导致未定义不是函数 控制器 wrmcControllers.controller 'voteCtrl', ($scope,$attrs) -> this.hasVoted = false this.init = -> if this.hasVoted #scope.vote = Vote.get(scope.vote) else

以下是我在创建指令中的博文:

他似乎建议将控制器与指令分开。但是,尝试从链接函数中的外部控制器运行函数会导致未定义不是函数

控制器

wrmcControllers.controller 'voteCtrl', ($scope,$attrs) ->
   this.hasVoted = false
   this.init = ->
     if this.hasVoted
       #scope.vote = Vote.get(scope.vote)
     else
       this.vote = null

   this.voteUp = ->
     if this.vote == true
       this.vote = null
     else
       this.vote = true
       this.hasVoted = true

   this.voteDown = ->
     if this.vote == false
       this.vote = null
     else
       this.vote = false
       this.hasVoted = true
指示

 wrmcDirectives.directive 'voteSet', ->
   restrict: 'AE'
   scope: {}
   controller: 'voteCtrl'
   templateUrl: 'vote.html'
   link: (scope,element,attrs,controller) ->
     console.log controller
     controller.init()
Console.log控制器输出

function () {
      if (this.vote === false) {
        return this.vote = null;
      } else {
        this.vote = false;
        return this.hasVoted = true;
      }
    }

我想你可以试试,我不确定:

{
   controller:....,
   controllerAs: "myctrl",
   link : function($scope) {
        $scope.myctrl.init()
   }
}

您上面的示例控制器,我认为是用于要求所需指令的控制器。

我认为您可以尝试一下,我不确定:

{
   controller:....,
   controllerAs: "myctrl",
   link : function($scope) {
        $scope.myctrl.init()
   }
}

上面的示例控制器,我认为是用于要求所需指令的控制器。

我尝试使用传统javascript,没有问题,因此最好检查broswer控制台,查看您的代码是否存在任何运行时错误。

我尝试使用传统javascript,没有问题,因此,最好检查broswer控制台,查看代码是否存在运行时错误。

init函数似乎附加到作用域,而不是控制器实例上。。。将$scope.init更改为this.init如果你想初始化你的控制器,我建议你应该在控制器代码中调用init方法。$scope.init只是我尝试的不同东西,但我把它切换回了this.init。这对结果没有影响。你的控制器似乎有点奇怪;您的控制台日志输出并没有显示整个控制器,而是显示最后一个函数voteDown,就好像它是整个对象一样。我对CoffeeScript不是专家,但我认为这不是角度问题,而是CoffeeScript中的编译问题。尝试将控制器作为传统JavaScript元素编写并验证其功能,然后尝试确定您的CoffeeScript版本出现损坏的原因。init函数似乎附加到作用域而不是控制器实例上。。。将$scope.init更改为this.init如果你想初始化你的控制器,我建议你应该在控制器代码中调用init方法。$scope.init只是我尝试的不同东西,但我把它切换回了this.init。这对结果没有影响。你的控制器似乎有点奇怪;您的控制台日志输出并没有显示整个控制器,而是显示最后一个函数voteDown,就好像它是整个对象一样。我对CoffeeScript不是专家,但我认为这不是角度问题,而是CoffeeScript中的编译问题。尝试将控制器作为传统的JavaScript元素编写,并验证其功能,然后尝试确定您的CoffeeScript版本出现问题的原因。我一直在检查控制台,当然,如果是这种情况,我会包含任何相关错误。我一直在检查控制台,如果是这样的话,我会包括任何相关的错误。你能给我看一个plunker什么的吗。我知道应该是这样的。你能给我看一个扑克牌什么的吗。我知道应该这样。