Javascript 无法以角度获取对象的值
我的AngularJS中有一个Javascript 无法以角度获取对象的值,javascript,angularjs,Javascript,Angularjs,我的AngularJS中有一个工厂: app.factory('userFactory', function($window) { var auth = { isLogged: false, user: "a", check: function() { if ($window.sessionStorage.token) { this.isLogged = true;
工厂
:
app.factory('userFactory', function($window) {
var auth = {
isLogged: false,
user: "a",
check: function() {
if ($window.sessionStorage.token) {
this.isLogged = true;
} else {
this.isLogged = false;
delete this.user;
}
}
}
return auth;
});
我把这个静态的,为了测试,放在AngularJS控制器
中,当点击按钮
时,它运行
// replace "a" with the following
app.controller('LoginCtrl', ['$scope', '$window', '$location', 'userFactory',
function ($scope, $window, $location, userFactory) {
$scope.login = function(){
var userCredentials = {
"username": $scope.username,
"password": $scope.password
};
if (userCredentials.username == "amir" && userCredentials.password == "blum") {
userFactory.isLogged = true;
userFactory.user = {
"name": "amir",
"surname": "blumenfeld"
};
$location.path("/customer");
} else {
alert("NO");
}
}
}
]);
然后我试着做:
function menuCtrl($scope, $location, userFactory, $window) {
$scope.user = userFactory.user.surname;
}
所以“blumenfeld”应该在这里呈现
<ul ng-controller="menuCtrl">
<li><a href="#home">{{ user }}</a></li>
</ul>
但我什么也得不到,只是一片空白
请帮助我理解我哪里做错了。我怎样才能解决这个问题
谢谢我复制粘贴了你的代码,它看起来很有效
问题在于,在创建
$scope.user
时,您似乎正在将其设置为userFactory.user.nam姓氏
。换句话说,您的用户
是a
,姓氏
是未定义的
然后在单击事件中,将userFactory.user
设置为对象。但是由于$scope.user
被设置为未定义,它无法知道它的值取决于userFactory.user
,并且该值不会更改,并且始终是未定义的
如果你想要一个有效的东西,你必须把工厂里的对象设置成一个对象。在单击事件中,必须在不更改对象的情况下更新值
var-app=angular.module('MyApp',[]);
app.factory('userFactory',函数($window){
var auth={
isLogged:错误,
用户:{
名称:“a”,
姓:“a”,
工作:“a”,
}
}
返回auth;
});
app.controller('menuCtrl2',['$scope','userFactory',function($scope,userFactory){
$scope.load=函数(){
userFactory.user.name=“amir”
userFactory.user.name=“blumenfeld”
userFactory.user.job=“疯狂”
}
}]);
app.controller('menuCtrl',['$scope','userFactory',function($scope,userFactory){
$scope.user=userFactory.user;
}]);代码>
负载
{{用户.姓氏}
尝试创建属性名称周围不带“”的用户对象:
userFactory.user = {name:"amir",surname:"blumenfeld",job:"crazy"};
普朗克?你能分享你的密码吗?听起来你好像有种族歧视。当您更改$scope.user
时,当您在其他控制器中修改userFactory.user
时,将不会重新计算该值。@LoïcFaure Lacroix不可能存在竞争条件。一旦运行了足够多的摘要循环,就会生成一个值present@antoniskamamis确保存在竞争条件,设置为作用域时,值姓氏
不存在,但稍后单击按钮时才存在。@VasiliyVanchuk我添加了更多信息。看一看谢谢你的回答。我会检查一下,让你知道。我在我原来的帖子中添加了更多信息。如果您注意到模板不能简单地使用“user”,请检查它,因为它是一个基本值,除非在范围中显式更改,否则如果更改,则无法猜测。由于某些原因,这仍然不起作用。我会再次检查并让您知道。同样的,userFactory.user是在$scope.user设置之后设置的。对不起,我忘了更新我的小提琴@斯莱文正在工作
userFactory.user = {name:"amir",surname:"blumenfeld",job:"crazy"};