Firebase:为什么我们需要bindTo方法?

时间:2015-11-28 17:26:15

标签: javascript angularjs data-binding firebase

我最近开始为我的Angular JS探索Firebase。 我有两个片段,

    var ref = new Firebase("https://my-firebase-id.firebaseio.com");

    var syncObject = $firebaseObject(ref);
    syncObject.$bindTo($scope, "data");

    var ref = new Firebase("https://my-firebase-id.firebaseio.com");

    $scope.data = $firebaseObject(ref);

现在在视图中,我有,

<div class="container" ng-controller="FirebaseController">
    {{data}}
</div>

控制器$ scope.data对象同样适用于三向数据绑定,并且一旦基础数据发生更改,视图就会更新。所以我怀疑,这有什么区别?应选择哪一个(在'syncObject。$ bindTo(..)'和'$ scope.data = ..)'以及在什么条件下。

如果不清楚,请告诉我,所以我会尝试进一步解释。

感谢。

1 个答案:

答案 0 :(得分:3)

好的,我经过一些测试后得到了答案。

#! /bin/bash
clear
BASEPATH=<base_path>
FILES=<folder_with_files>
TEMP_UNZIPPED="tmp"
FINAL_RES="pg-1"
#iterate each file in folder and apply grep
INDEX=0
DATE=$(date "+DATE: %d/%m/%y - TIME: %H:%M:%S")
echo "$DATE" > log
for i in ${BASEPATH}${FILES}
do
FILENAME="${i%.*}"
if [ $INDEX = 0 ]; then
  VAR=$(gunzip $i)
  #-e -> multiple condition; -w exact word; -r grep recursively; -h remove file path
  FILTER_EN=$(grep -e '^en.n\|^en ' $FILENAME > $FINAL_RES)
  INDEX=1
  #remove file to free space
  rm $FILENAME
else
  VAR=$(gunzip $i)
  FILTER_EN=$(grep -e '^en.n\|^en ' $FILENAME > $TEMP_UNZIPPED)
  cat $TEMP_UNZIPPED >> $FINAL_RES
  #AWK BLOCK
  #create array a indexed with page title and adding frequency parameter as value.
  #eg. a['ciao']=2 -> the second time I find "ciao", I sum previous value 2 with the new. This is why i use "+=" operator
  #for each element in array I print i=page_title and array content such as frequency
  PARSING=$(awk '{  page_title=$1" "$2;
                    frequency=$3;
                    array[page_title]+=frequency
                  }END{
                    for (i in array){
                      print i,array[i] | "sort -k2,2"
                    }
                  }' $FINAL_RES)

  echo "$PARSING" > $FINAL_RES
  #END AWK BLOCK
  rm $FILENAME
  rm $TEMP_UNZIPPED
fi
done
mv $FINAL_RES $BASEPATH/06/01/
DATE=$(date "+DATE: %d/%m/%y - TIME: %H:%M:%S")
echo "$DATE" >> log

实际上建立了双向绑定,即如果我们稍后使用

更改数据
syncObject.$bindTo($scope, "data1")

它实际上实时保存在firebase数据库中。

现在是另一种情况,

$scope.data1.xyz = "jjj";

这就像一个单向绑定的原型继承对象,它会在数据库中的数据更改中得到通知(更新),但对象本身的任何更改都不会反映在服务器上。

$scope.data2 = $firebaseObject(ref);

不会更新firebase数据库,只会更新本地模式。来自数据库服务器的任何新推送更新都将覆盖本地更改。

我希望说清楚。我也验证过了。