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什么的吗。我知道应该是这样的。你能给我看一个扑克牌什么的吗。我知道应该这样。