Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法以角度获取对象的值_Javascript_Angularjs - Fatal编程技术网

Javascript 无法以角度获取对象的值

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;

我的AngularJS中有一个
工厂

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"};