【发布时间】:2014-11-30 21:02:06
【问题描述】:
所以我试图在 Angular 中创建一个单独的模块,该模块将包含我在所有控制器中经常使用的功能。
现在我创建了一个文件common.js.coffee,其中包含我为保存我的函数而创建的模块。
看起来像这样:
@test.factory 'MyLib', ['$window', ($window) ->
flashNotification = ($scope, text) ->
console.log("Here")
$scope.message = text
$scope.notify = true
setTimeout(() ->
$scope.notify = false
, 2000)
]
现在当我尝试像这样在我的控制器中使用它时:
@test.controller 'UsersCtrl',
['$scope', '$location', '$http', 'MyLib',
($scope, $location, $http, MyLib) ->
$scope.users = []
$scope.roles = []
$scope.notify = false
$scope.updateUser = (user, selectedRole) ->
$http({
method: 'PATCH',
url: './users/' + user.id + '.json',
data: user: {role: selectedRole.key}
}).success( (data) ->
for user in $scope.users
if user.id == data.user.id
user.role = data.user.role
# Here I call the Common function
MyLib.flashNotification($scope, 'Updated role for user: ' + user.name)
).error( ->
# Display error notification
)
]
但是现在,当我的控制器尝试执行我在工厂中创建的名为 MyLib 的函数时,它说该函数甚至还没有声明。
【问题讨论】:
-
我不使用coffeescript,但据我了解,它会自动返回范围内的最后一项?因此,您当前返回的是方法 (flashNotification) 本身,而不是附加该方法的工厂对象。如果这是真的,您应该可以通过在控制器中调用
MyLib($scope)来确认。这应该可行,但您可能想要更改它 -
你是对的,它确实只返回了其中的第一个函数。但是我怎样才能改变这种行为呢?
-
将工厂转为服务,它应该可以正常工作
-
@harish 会吗?它仍然返回一个方法,所以我不确定如何。 Kaspar:在普通的 JS 中你会
return { method: function(){...} },所以我猜咖啡相当于那个 -
好吧,看看我能做什么。
标签: angularjs ruby-on-rails-4 coffeescript