【问题标题】:Not able to use functions inside of a own created Angular "library"无法在自己创建的 Angular“库”中使用函数
【发布时间】: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


【解决方案1】:

我通过使语法看起来像这样使它工作:

@test.factory 'MyLib', ['$window', ($window) ->

    {
        flashNotification: ($scope, text) ->
            console.log("Here")
            $scope.message = text
            $scope.notify = true
            setTimeout(() ->
                $scope.notify = false
            , 2000)

    }


]

【讨论】:

    猜你喜欢
    • 2019-01-18
    • 2013-09-22
    • 1970-01-01
    • 2015-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    • 2012-09-02
    相关资源
    最近更新 更多