1

AngularJS 和 DOM 中的.add()方法有区别吗?我在 AngularJS 应用程序中使用.add()并且遇到了将数据推送到 firebase 的 *问题。当我查看文档进行一些研究时,我在 AngularJS 文档中没有发现任何关于此方法的信息。我发现DOM 中的.add()用于向选择添加选项(例如 Object_of_Select.add(option, before);)。但这并不能真正将 IMO 转化为我在 AngularJS 中的使用方式。

*我遇到的问题:我对 Firebase 和持久数据没有任何问题,它超级简单而且很棒。但是,当我获取一个对象(在此示例中为“活动”)并将对象推入对象的嵌套数组(“策略”)时,我遇到了问题。第二次添加本地数据后,我无法再将该数据“添加”到 Firebase。没有错误,什么都没有。

因此,如果有人能指出我正确的方向,那就太好了。

模板

<!-- TITLE THE CAMPAIGN -->
<h3>{{campaign.name}}</h3>
<input type="text" placeholder="Campaign Title" ng-model="campaign.name"/>

<!-- LOOP THROUGH TACTICS -->
<div class="well well-lg" ng-repeat="foo in campaign.tactics">
  <h4>{{foo.name}} - {{foo.type}}</h4>
</div>

<!-- SELECT TACTIC TYPE (Loaded from separate Firebase instance)-->
<select ng-model="tacticSelect">
    <option ng-repeat="tactic in tactics" value="{{tactic.name}}">{{tactic.name}} ({{tactic.type}})</option>
</select>

<!-- PUSH NEW TACTICS INTO TACTIC LOOP -->
<button class="btn" ng-click="campaign.tactics.push({'name': tacticSelect, 'type': 'email'})"><span class="glyphicon glyphicon-plus" ></span> Add Tactic</button>


<!-- SAVE CAMPAIGN TO CAMPAIGNS FIREBASE -->
<button class="btn btn-success" ng-click="campaigns.add(campaign)"></span> Save</button><!-- ng-click="campaigns.add(campaign)"-->

控制器

function scopeAssignments($scope, angularFireCollection, $location){

        $scope.tactics = angularFireCollection(fbTactics);
        $scope.campaigns = angularFireCollection(fbCampaigns);

        // SAMPLE DATA SET
        $scope.campaign = {"tactics" : []}; 
}

所需的数据结构(我正在尝试创建可以在单个广告系列中包含多种策略的广告系列。)

$scope.campaign = { 
    "name" : "Sample Campaign",
    "tactics" : [{
        "name" : "First Tactic",
        "type" : "Email"
     }]
};
4

1 回答 1

1

add既不是 Angular 方法也不是 DOM 方法。这是 angularFireCollection 提供的一种方法。angularFireCollection显式同步数据,这意味着调用$scope.campaigns.tactics.push不足以将该数据发送到 Firebase。

你基本上有两个选择。您可以使用该angularFire服务,该服务将在本地更改时自动同步数据。

控制器

function scopeAssignments($scope, angularFire){
    $scope.tactics = angularFire(fbTactics);
    $scope.campaigns = angularFire(fbCampaigns);
    $scope.campaign = $scope.campaigns[campaignID];
    $scope.campaign.tactics = [];
}

如果你想坚持使用 angularFireCollection,当你想将一些数据发送到 Firebase 服务器时,你必须明确地通知集合。例如,您可以通过以下方式执行此操作:

模板

<!-- PUSH NEW TACTICS INTO TACTIC LOOP -->
<button class="btn" ng-click="addTactic(campaign, tacticSelect)">
  <span class="glyphicon glyphicon-plus"></span> Add Tactic
</button>

控制器

$scope.addTactic = function(campaign, tactic) {
  $scope.campaign.tactics.push({'name': tacticSelect, 'type': 'email'});
  $scope.campaigns.update($scope.campaign);
}
于 2013-09-11T23:01:25.433 回答