AngularJS和DOM中的 .add()方法有区别吗?我在AngularJS应用程序中使用 .add(),我遇到了将数据推送到firebase的问题。当我查看文档进行一些研究时,我在AngularJS文档中没有发现任何关于此方法的内容。我发现DOM中的 .add()用于向选择添加选项(例如Object_of_Select.add(选项,之前);)。但这并没有真正将IMO转化为我在AngularJS中的使用方式。
*我遇到的问题: 我对Firebase和持久数据没有任何问题,它非常简单和令人敬畏。然而,当我拿一个对象(在这个例子中是“campaign”)并将对象推入一个嵌套的对象数组(“tactics”)时,我遇到了问题。第二个我添加了本地数据,我无法再将这些数据“添加”到Firebase。没有错误,只是没有。
因此,如果有人能指出我正确的方向,那将是超级的。
TEMPLATE
<!-- 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)"-->
CONTROLLER
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"
}]
};
答案 0 :(得分:1)
add
既不是Angular方法也不是DOM方法。这是angularFireCollection提供的方法。 angularFireCollection显式同步数据 ,这意味着调用$scope.campaigns.tactics.push
不足以将该数据发送到Firebase。
你基本上有两个选择。您可以使用angularFire
服务,该服务会在本地更改时自动同步数据。
<强> CONTROLLER 强>
function scopeAssignments($scope, angularFire){
$scope.tactics = angularFire(fbTactics);
$scope.campaigns = angularFire(fbCampaigns);
$scope.campaign = $scope.campaigns[campaignID];
$scope.campaign.tactics = [];
}
如果您想坚持使用angularFireCollection,则必须在希望将某些数据发送到Firebase服务器时明确通知该集合。例如,您可以通过以下方式执行此操作:
<强> TEMPLATE 强>
<!-- PUSH NEW TACTICS INTO TACTIC LOOP -->
<button class="btn" ng-click="addTactic(campaign, tacticSelect)">
<span class="glyphicon glyphicon-plus"></span> Add Tactic
</button>
<强> CONTROLLER 强>
$scope.addTactic = function(campaign, tactic) {
$scope.campaign.tactics.push({'name': tacticSelect, 'type': 'email'});
$scope.campaigns.update($scope.campaign);
}