子范围内的窗口小部件,带有ng-repeated div和选择下拉列表:
<div ng-repeat="term in ticker.terms">
<select ng-model="term.chosenTag" ng-change="ticker.changeTag(term)">
<option>...</option>
<option>...</option>
<option>...</option>
我试图从父作用域更改^ term.chosenTag ,term
是重复的数据对象(term in terms
)
完整代码Gists:
主要父母HTML:
https://gist.github.com/leongaban/e0154005bed6b6892df7
Ticker Child HTML
https://gist.github.com/leongaban/9a5fd86643051fd9e1af
TickerController(Child)
https://gist.github.com/leongaban/2d58174cfe6e5c9c0465
MainController(Parent)
https://gist.github.com/leongaban/1563b09b906337a3e6ad
TagFactory
https://gist.github.com/leongaban/8db5027e1cb86f614fa5
现在,父范围中的select也需要控制子选择中的模型:
<select ng-model="main.selected_tag"
ng-change="main.changeTag(main.the_tag)">
main.changeTag函数调用它:
vm.changeTag = function(term) {
// Update tag in model:
TagFactory.updateTag(term);
};
然后TagFactory更新数据库中的术语以及我的模型:
// Update tag:
tags.updateTag = function(data) {
var tag = data;
// Filter and find tag by id:
var tagObj = {};
tagObj = $filter('filter')(tags, { term_id: tag.term_id })[0];
// Update tag in model:
tagObj.tag = tag.chosenTag;
/**
* PUT : update tag on DB
*/
ApiFactory.updateTag(
tag.term_id,
tag.chosenTag,
tag.ticker).then(function(data) {
console.log('PUT:');
console.log(data);
});
return tag;
};
答案 0 :(得分:1)
由于你启动了updateTag调用onchange,而不是onclick,我将假设不断更新服务的数据是正常的。另一种不建议的方法是,如果您只想在特定时间将数据推送到服务,以避免所有模板在您仍需要执行AJAX时立即查看工厂数据的更改。 / p>
在适当的控制器中,注入TagFactory,创建对工厂数据的引用:
$scope.tags = TagFactory.tags;
然后您的HTML可以直接修改TagFactory本身:
<div ng-repeat="tag in /*expression that determines ticker.terms with respect to $scope.tags*/">
<select ng-model="tag.chosenTag">
表达式可以像&#34; tags&#34;一样简单,但它可能需要涉及一个只返回ticker.terms标签的过滤器。