2015-08-13 34 views
0

我跟着this post错误:Firebase.set失败:第一个参数包含在财产“achv_img”

采用了棱角分明和火力achievementsapp.firebaseapp.com,你可以注册,然后如果你点击绿色的,再加上它应该弹出的具有外形未定义形式,上传按钮不能正常使用时,点击Add按钮,它给了我这个错误错误:Firebase.set失败:第一个参数包含在财产“achv_img”

控制器代码未定义:

myApp.controller('MeetingsController', 
    function($scope, $rootScope, $firebase, Uploader, 
    CountMeetings, FIREBASE_URL) { 

    var ref = new Firebase(FIREBASE_URL + '/users/' + 
    $rootScope.currentUser.$id + '/meetings'); 

    var meetingsInfo = $firebase(ref); 
    var meetingsObj = meetingsInfo.$asObject(); 

    meetingsObj.$loaded().then(function(data) { 
    $scope.meetings = data; 
    }); //make sure meetings data is loaded 

    $scope.addMeeting = function() { 
    meetingsInfo.$push({ 
     name: $scope.meetingname, 
     description: $scope.meetingdescription, 
     achv_type: $scope.achvtype, 
     achv_date: $scope.achvdate, 
     achv_img : $scope.achvimg, 
     date: Firebase.ServerValue.TIMESTAMP 
    }).then(function() { 
     $scope.meetingname=''; 
     $scope.achvtype = ''; 
     $scope.meetingdescription=''; 
     $scope.achvdate=''; 
     $scope.achvimg= $scope.meetingsInfoImgData; 
    }); 
    Uploader.create($scope.meetingsInfo); 


    $scope.handleFileSelectAdd = function(evt) { 
    var f = evt.target.files[0]; 
    var reader = new FileReader(); 
    reader.onload = (function(theFile) { 
     return function(e) { 
     var filePayload = e.target.result; 
     $scope.meetingsInfoImgData = e.target.result; 
     document.getElementById('pano').src = $scope.meetingsInfoImgData; 
     }; 
    })(f); 
    reader.readAsDataURL(f); 
    }; 
    document.getElementById('file-upload').addEventListener('change', $scope.handleFileSelectAdd, false); 


    }; //addmeeting 

    $scope.deleteMeeting = function(key) { 
    meetingsInfo.$remove(key); 
    }; //deleteMeeting 

}); //MeetingsController 
+1

下面有些帮助。请注意,StackOverflow是一个臭名昭着的低效调试服务。如果你仍然陷入困境,可以考虑在jsfiddle/jsbin中创建一个最小的复制(就像我为了链接到的问题而创建的那个),然后发布该URL。 –

回答

2

reader.onload()你从文件中取的图像数据,并把它变成$scope.meetingsInfoImgData

reader.onload = (function(theFile) { 
    return function(e) { 
    var filePayload = e.target.result; 
    $scope.meetingsInfoImgData = e.target.result; 
    document.getElementById('pano').src = $scope.meetingsInfoImgData; 
    }; 
})(f); 

我原来的答案,然后利用其相当于本$scope.meetingsInfoImgData后的填充JavaScript对象,并将其发送到火力地堡:

$scope.episode.img1 = $scope.episodeImgData; 
var episodes = $firebase(ref).$asArray(); 
episodes.$add($scope.episode); 

当您尝试在Firebase中创建对象时,您的代码与$scope.meetingsInfoImgData无关。您的代码中可能还需要类似$scope.episode.img1 = $scope.episodeImgData;的东西。

+0

谢谢弗兰克,我现在犯了一个错误,它是更好的https://jsfiddle.net/9cazhb44/页面没有完全加载,我没有部署它在这里https://achievementsapp.firebaseapp.com只是注册。 如果您打开meetings.js我希望$ scope.addMeeting函数中的.img1 $ scope,这将如何工作? – molham

+0

那个小提琴仍然是一个完整的应用程序,只是不起作用。如果你将问题隔离到一个最小但完整的复制品,我可能会提供帮助。请阅读http://stackoverflow.com/help/mcve并申请。 –

+0

即时通讯使用角度和firebase,我不能说一种方法把这个代码放在小提琴,这里的缩小版本https://jsfiddle.net/9cazhb44/5/ – molham

1

如果由于某种原因,你不能从源头上解决这个问题,以确保您的对象不包含任何不确定的道具使用这个简单的一招: JSON.parse(JSON.stringify(ObjectToSave))

欲了解更多信息看一看这个codePen:http://codepen.io/ajmueller/pen/gLaBLX

相关问题