Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript $firebaseArray在保存子元素后丢失函数_Javascript_Arrays_Firebase_Ionic_Angularfire - Fatal编程技术网

Javascript $firebaseArray在保存子元素后丢失函数

Javascript $firebaseArray在保存子元素后丢失函数,javascript,arrays,firebase,ionic,angularfire,Javascript,Arrays,Firebase,Ionic,Angularfire,我正在尝试实现一个列表详细信息视图。该列表是使用$firebaseArray(ref)生成的。单击列表上的项目时,列表控制器使用list.$getRecord(item.$id)获取特定记录。将其放入全局服务(带有set和get的just和empty对象),并在我的详细信息控制器中,将该服务(已设置为所选项)分配给详细信息控制器中的范围变量并显示它 详图视图中的信息是可编辑的。编辑时,会出现一个保存按钮,单击该按钮时,将使用此代码保存编辑 item = editItem; //editItem

我正在尝试实现一个列表详细信息视图。该列表是使用
$firebaseArray(ref)
生成的。单击列表上的项目时,列表控制器使用
list.$getRecord(item.$id)
获取特定记录。将其放入全局服务(带有set和get的just和empty对象),并在我的详细信息控制器中,将该服务(已设置为所选项)分配给详细信息控制器中的范围变量并显示它

详图视图中的信息是可编辑的。编辑时,会出现一个保存按钮,单击该按钮时,将使用此代码保存编辑

item = editItem; //editItem contains the new changes made on the detail page 
list.$save(item).then(function(ref){
    //ref.key() === item.$id; // 
    console.log("Your Edit has been saved');
  });
这很有效。编辑将反映在远程firebase数据上

但当我导航回列表视图并尝试单击另一项时,问题就出现了。它得到一个错误,上面写着
列表。$getRecord()
不是函数。现在,如果不在“详细信息”视图上保存编辑,则不会发生此错误

我在保存前后打印了列表数组,我意识到了这一点

保存项目前列出数组(包含AngularFire方法)

保存项目后列出数组(不再包含AngularFire方法)

我不知道$firebaseArray为什么会有这种反应。我有什么遗漏吗?这是正常的行为吗? PS:我用的是离子火和角火

如果需要,我可以发布更多代码

编辑 下面是代码的抽象

List.html

<ion-list>
    <ion-item href="#/lead/info"  ng-click="vm.selectItem(l.$id)" ng-repeat="l in vm.list" >
      <h3>{{l.firstName}} {{l.lastName}}</h3>
      <h4 class="">
        <p>{{l.topic}}</p>
      </h4>
    </ion-item>
  </ion-list>
selectedItem
服务很简单。我使用它来设置单个对象或对象数组

function selectedItem() {
    var sItem = {};
    var List = {};

    return {
        getItem: function () {
            return sItem;
        },
        setItem: function (authObject) {
            sItem = authObject;
        },
        getList: function(){
          return List;
        },
        setList: function(al){
          List = al;
        }
    };
  };
详图视图控制器是ass,因此:

js(控制器功能)

更新

在我的代码中经过认真的交叉检查后,我意识到问题不是来自AngularFiire数组。甚至我对
r.$watch
r.$loaded
所做的变通都是不必要的。对变通的需要是由我的代码的另一部分引起的,我认为这与我的代码无关。
我为这个错误道歉。我将很快删除此问题和相关问题

尝试使用观察者重新加载数据:

var fireList = new Firebase("https://xxxxx.firebaseio.com/list");
var r = $firebaseArray(fireList);

r.$watch(function() {
  r.$loaded(function () {
    vm.list = r;
  });
});

这是一种简单处理更新的常用方法,可能会解决您的问题。

尝试使用监视程序重新加载数据:

var fireList = new Firebase("https://xxxxx.firebaseio.com/list");
var r = $firebaseArray(fireList);

r.$watch(function() {
  r.$loaded(function () {
    vm.list = r;
  });
});

这是一种简单处理更新的常用方法,可能会解决您的问题。

是的,首先是listView。$getRecord()。所以listView.getRecord()不是一个函数应该是正确的。此外,我们还需要一个能帮助解决复杂问题的人,比如实例的意外变异。请再显示一些代码。@kato,这是一个打字错误。我已经把这个问题加进去了code@chrillewoodz我已经在JSFIDLE等中添加了一些编解码器来创建一个真正的复制,我们将知道为什么会发生这种情况;这只是脱节的剪报,魔鬼就在细节中。不清楚为什么所有vm.list={}$loaded()内容甚至是必需的(提示:它不是)。摆脱这种状况将是真正解决问题的第一步。您应该只需要列表中的一个声明,而不需要包装上的一堆包装和同一变量的三到五个赋值。AngularFire的全部目的是负责装载和绑定。您已经在这里实现了一半的库来处理加载。是的,首先,它是listView。$getRecord()。所以listView.getRecord()不是一个函数应该是正确的。此外,我们还需要一个能帮助解决复杂问题的人,比如实例的意外变异。请再显示一些代码。@kato,这是一个打字错误。我已经把这个问题加进去了code@chrillewoodz我已经在JSFIDLE等中添加了一些编解码器来创建一个真正的复制,我们将知道为什么会发生这种情况;这只是脱节的剪报,魔鬼就在细节中。不清楚为什么所有vm.list={}$loaded()内容甚至是必需的(提示:它不是)。摆脱这种状况将是真正解决问题的第一步。您应该只需要列表中的一个声明,而不需要包装上的一堆包装和同一变量的三到五个赋值。AngularFire的全部目的是负责装载和绑定。您在这里实现了一半的库,试图处理加载。@Raymondativi我真的不了解自己,对不起。但是现在你知道如何避免这个错误了,这就是重点:)如果你接受我的答案,我将不胜感激:)老实说,这不应该是必要的。很好的解决办法。@RaymondAtivie我真的不了解自己,抱歉。但是现在你知道如何避免这个错误了,这就是重点:)如果你接受我的答案,我将不胜感激:)老实说,这不应该是必要的。不过这是一个很好的解决办法。
var fireList = new Firebase("https://xxxxx.firebaseio.com/list");
var r = $firebaseArray(fireList);

r.$watch(function() {
  r.$loaded(function () {
    vm.list = r;
  });
});