从另一个控制器内部更新模型
Update model from inside of another controller
我试图在提交表单后将新数据行推到表中。然而,表UrlListCtrl
不同于表UrlFormCtrl.
function UrlFormCtrl($scope, $timeout, UrlService) {
$scope.message = '';
var token = '';
$scope.submitUrl = function(formUrls) {
console.log('Submitting url', formUrls);
if (formUrls !== undefined) {
UrlService.addUrl(formUrls).then(function(response){
$scope.message = 'Created!';
// I need to update the view from here
});
} else {
$scope.message = 'The fields were empty!';
}
}
在UrlFormCtrl
中,我发送一个数组到数据库进行存储,之后我想更新视图,其中UrlListCtrl
处理它。
function UrlListCtrl($scope, $timeout, UrlService){
UrlService.getUrls().then(function(response){
$scope.urls = response.data;
});
}
我正试图将新数据推送到$scope.url
。以下是服务:
function UrlService($http) {
return {
addUrl: addUrl,
getUrls: getUrls
}
function addUrl(formUrls) {
console.log('adding url...');
return $http.post('urls/create', {
original_url: formUrls.originalUrl,
redirect_url: formUrls.redirectUrl
});
}
function getUrls() {
return $http.get('urls/get');
}
}
我还在努力理解Angular,所以这对我来说相当复杂。如何从UrlFormCtrl
中更新$scope.urls
?
我不确定我完全理解你的问题,但我会尽量回答它=)。
所以你试图更新一个变量的值被改变在另一个控制器?
这就是service
可以发挥作用的地方。
在服务中,你有这个变量:
myApp.service('ServiceName', ['$http', function(){
var urls = [];
return{
urls: urls
}
}])
把$watch
放在一个控制器中,在那里你想获得新的值:
myApp.controller('FirstController', function(...){
$scope.$watch(function () {
return ServiceName.urls;
}, function (newVal) {
$scope.urls = newVal;
});
})
然后,从另一个控制器更改它:
myApp.controller('SecondController', function(...){
ServiceName.urls.push('newValue');
})
这个应该可以了。$scope.urls
将在第一个控制器中更新,即使它在第二个控制器中更改。
$watch
的概念对您来说可能是新的。它基本上执行一个回调函数,每当第一个函数返回一个新值。也就是说,当被监视的变量发生变化时。
在你的例子中:
你将在你的服务中有一个变量:
function UrlService($http) {
var urls = [];
function addUrl(formUrls) {
console.log('adding url...');
return $http.post('urls/create', {
original_url: formUrls.originalUrl,
redirect_url: formUrls.redirectUrl
});
}
function getUrls() {
return $http.get('urls/get');
}
return {
addUrl: addUrl,
getUrls: getUrls
urls: urls
}
}
将$watch
放入UrlListCtrl
:
function UrlListCtrl($scope, $timeout, UrlService){
$scope.$watch(function () {
return UrlService.urls;
}, function (newVal) {
$scope.urls = newVal;
});
}
然后,将urls
的值从UrlFormCtrl
改为:
$scope.submitUrl = function(formUrls) {
if (formUrls !== undefined) {
UrlService.addUrl(formUrls).then(function(response){
$scope.message = 'Created!';
UrlService.urls = response['urls'];
});
} else {
$scope.message = 'The fields were empty!';
}
}
UrlListCtrl
中的$watch
将确保将新值分配给UrlFormCtrl
中的$scope.urls
。
相关文章:
- 视图ngValue-Angular JS中未更新模型的更改
- 需要使用触摸屏从 AngularJS 指令中更新模型
- 角度指令没有更新模型视图
- 复选框仅在第二次单击后更新模型
- Angular.js-Socket.io事件更新模型,而不是视图
- UI Select在删除后不会更新模型
- 为什么ng提交没有提交和更新模型
- AngularJS-基于URL更新模型
- 视图更改时,Ember.js更新模型
- Knockoutjs函数更新模型时应出现异常
- 挖空绑定不会更新模型
- 范围不更新模型中的更改
- 导航时更新模型变量
- 角度.js更新模型
- Ember.js不更新模型
- 在使用挖空自定义绑定时更新模型时更新元素
- 在自我更新时以ng重复更新模型
- 如何在主干中对列表进行排序时更新模型的顺序属性
- AngularJS 复选框不更新模型
- 更新模型中的数据不会绑定到控制器