未捕获的TypeError:无法从工厂读取未定义的属性'$ apply'

时间:2017-01-13 08:30:31

标签: javascript angularjs firebase-authentication

我想在注册时将图片上传到firebase,并且我想在更新我的会员资料时添加图片网址。

上传图片后,当生成下载URL时,它会使用$ broadcast或$ emit注册事件,在更新成员个人资料时检测事件,并尝试传递文件URL。

如果$ emit或$ broadcast在工厂中是'undefined',如果你使用$ apply,$ apply将是'undefined'。

我想知道原因和解决方案。

工厂代码

app.factory('imageUpload', [function($rootScope){
    return {
        exec: function(event,targetObj){

            // image file check
            .....

            return { file: file, fileCheck: true };
        },
        serv: function(event, childPath){

            // firebase file upload
            .....

            $rootScope.$apply(function() {
                $rootScope.$emit('UPLOAD_EVENT_URL', downloadURL);
            });

            return downloadURL; //imageUpload.serv return
        }
    };

}]); // end imageUpload

控制器代码

app.controller('userSignUp', ['$scope', 'dialogAlert', 'imageUpload', '$location', function($scope, dialogAlert, imageUpload, $location){

    // init code
    .....

    // signup
    $scope.signUp = function(){

        //firebase signup & user update
        firebase.auth().createUserWithEmailAndPassword($scope.user.email, $scope.user.password).then(function(user) {

            $scope.$on('UPLOAD_EVENT_URL', function (event, fileUrl) {
                        alert("On : "+fileUrl);
            });

            user.updateProfile({
                displayName: $scope.user.penName,
                photoURL: imgUrl
            }).then(function() {
                // member update code
                .....
            }, function(error) {
                // error msg code
                .....
            });        
        }, function(error) {
            // Handle Errors here.
            .....
        });
    }
}]);

0 个答案:

没有答案