angular $ firebaseArrray:控制器和指令之间的区别

时间:2015-06-09 19:10:53

标签: angularjs controller firebase angularfire directive

这是我关于堆栈溢出的第一个问题,所以请耐心等待: - )。

我有一个角度应用程序,我想显示从firebase检索到的用户信息。

有趣的是,当我在指令而不是控制器中发出firebase请求时,我从firebase获得了一些不同的数据。从我的指令中检索到的firebase数据是一个带有方法的对象。从我的控制器检索的数据是纯粹的json,只有数据,我插入了。

指令

angular.module('routerangular')
.directive('raEditor',[ "$firebaseArray", "$firebaseAuth", function( $firebaseArray, $firebaseAuth){
return {
  restrict: 'E',
  replace: true,
  controller: ["$scope", function ($scope) {
    var messagesRef = new Firebase("https://***.firebaseio.com/messages");

    messagesRef.onAuth(authDataCallback);

    function authDataCallback(authData) {
      if (authData) {
        $scope.users = $firebaseArray(messagesRef);

      }  
    }
  }]
};
}]);

我正在尝试通过在html中键入{{users}}来访问数据,但它只是说未定义。下面是console.log的输出,我输出的是从firebase收到的数据。

[] ***** this is the data I need *****0: Object$id: "-JrIUxOGb54jTV1R9zjy"$priority: nulldescription: "awesome chattionado"userName: "mcChat".....**** To try and keep this short, I have deleted some of the methods from the console.log, not data ****.....  $save: () { [native code] }$watch: () { [native code] }length: 1__proto__: Array[0]

控制器:

在控制器中,我使用了几乎相同的代码,但是我从firebase获得了一个合适的json数据集,我可以通过在html中键入{{users}}来检索数据。

angular.module('routerangular')
.controller('DisplayvideoCtrl', function ($scope, $firebaseObject,       $firebaseArray, $firebaseAuth) {


  var messagesRef = new Firebase("https://****.firebaseio.com/messages");

  messagesRef.onAuth(authDataCallback);
    function authDataCallback(authData) {
      if (authData) {
        $scope.users = $firebaseArray(messagesRef);
      } 
    }
});

控制器只输出存储在json中的数据:

[{"description":"awesome chattionado","userName":"mcChat"}]

我在这里缺少什么?为什么我无法从指令中的firebase检索数据。

2 个答案:

答案 0 :(得分:0)

$ scope在指令中的行为略有不同,隔离范围仅继承显式声明的属性。在这里排名前10位的错误中查看#8 Scoping $scope's

由于{{users}}会从您的指令返回一个对象,请尝试{{users.description}}和{{users.userName}}。

答案 1 :(得分:0)

谢谢大家的回复,我部分想出来了,并认为我可以解决这个问题。解决方案是,指令中的对象带有两个变量:$ id和$ value,它们可以在ng-repeat中用于从firebase生成键/值。谢谢大家。