Angular'控制器为'更新函数内部的属性
Angular 'controller as' updating an attribute inside a function
我正在努力学习在我的角度控制器中更频繁地使用controller as
,并且在从另一个函数内部更新作用域时遇到了作用域问题:
.controller('profileCtrl', function(ProfileData, Restangular){
// ProfileData comes from router.resolve
this.user = ProfileData;
// I want to update the data with a button click or something
this.refresh = function(id){
Restangular.one('users', id).get().then(function(resp){
this.user = resp;
})
}
});
在this.user = ProfileData
中,this.user = resp
实际上并不指代相同的this
。我不知道它指的是什么,也许是函数?
我通过注入作用域然后更改我的更新功能来修复这个问题:
this.refresh = function(id){
Restangular.one('users', id).get(params).then(function(resp){
$scope.profile.user = resp;
})
}
这种方法的问题在于它取决于我调用控制器myCtrl as profile
。
有没有一种方法可以在不注入作用域的情况下从我的函数中更新this.user
?
这将根据执行上下文被覆盖。
相反,您应该将其保存在一个临时变量中,并在闭包中引用它。
.controller('profileCtrl', function(ProfileData, Restangular){
// ProfileData comes from router.resolve
var $this = this;
$this.user = ProfileData;
// I want to update the data with a button click or something
$this.refresh = function(id){
Restangular.one('users', id).get().then(function(resp){
$this.user = resp;
})
}
});
这样,这总是你所期望的
您总是可以使用函数绑定来帮助您,但它的问题是,您因此无法访问默认this
上的任何方法或值。例如,
.controller('profileCtrl', function(ProfileData, Restangular){
// ProfileData comes from router.resolve
this.user = ProfileData;
// I want to update the data with a button click or something
this.refresh = function(id){
Restangular.one('users', id).get().then(function(resp){
this.user = resp;
}.bind(this)); //The 'this' in the .bind() function is the 'this' of the data outside the function. Weird, I know.
}
});
不确定这是否能特别解决你的问题,但这是我在处理MooTools时非常熟悉的一种方法。
相关文章:
- Javascript:循环属性内部的条件递增或递减
- javascript正则表达式,用于编辑元素内部的css样式属性
- 通过 Jquery 调用 tr 属性并找到我的内部复选框
- 在 Forerunner 数据库集合中创建主键时,key 属性是否可以位于集合对象的对象内部
- 为什么我不能在变量上使用内部HTML属性
- 如何从类函数内部访问对象属性
- 如何在firebase中通过内部属性进行过滤
- 为什么可以在内部函数成员中访问对象引用,而不能在内部属性成员中访问
- 如果我们使用:运算符在函数内部定义一个属性,会发生什么
- Javascript:如何通过其参数选择函数内部属性
- ECMAScript 中的内部属性定义是为了什么
- AngularJS 2 - 内部属性数据绑定 - 异常:类型错误:无法读取未定义的属性
- 访问内部属性名称以计算 ES6 中的新属性
- 如何剥离除<a></a><img>(内部属性)和<br>使用javascrip
- 如何在jqueryui小部件中存储内部属性
- 无法读取未定义的HTML内部属性
- 我应该在原型中添加内部属性吗?
- 从主窗口访问iframe内部属性
- 如何在JavaScript中找到具有另一个对象内部属性的对象
- 在 Javascript 中使用其范围之外的函数更新函数的内部属性