Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.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 AngularJS 1.x-$scope检查显示$scope.data,但直接访问$scope.data==未定义_Javascript_Angularjs_Angularjs Scope - Fatal编程技术网

Javascript AngularJS 1.x-$scope检查显示$scope.data,但直接访问$scope.data==未定义

Javascript AngularJS 1.x-$scope检查显示$scope.data,但直接访问$scope.data==未定义,javascript,angularjs,angularjs-scope,Javascript,Angularjs,Angularjs Scope,我正在监视$scope.taskId,然后尝试访问$scope.data上的属性 以下是我的功能: $scope.$watch('taskId', function(value) { console.log('here---------------'); console.log($scope, $scope.data); var titlePrefix = undefined; if (value) { titlePrefix = $scope.g

我正在监视$scope.taskId,然后尝试访问$scope.data上的属性

以下是我的功能:

$scope.$watch('taskId', function(value) {
    console.log('here---------------');
    console.log($scope, $scope.data);
    var titlePrefix = undefined;
    if (value) {
        titlePrefix = $scope.getTaskTitlePrefix();
        Page.setTitle(titlePrefix + $scope.taskId);
        $scope.loadData();
    }
});
我正在第3行记录上面的$scope和$scope.data

(console.log($scope$scope.data);)

以下是控制台中的输出:

这里---------------

m{$$childTail:m,$$childHead:b,$$nextSibling:m,$$watchers: 数组(81),$$listeners:Object…}

未定义

你知道为什么$scope看起来已经准备好并可用了,但它的变量却没有吗

这是初始化taskId变量的HTML,正如您所看到的,这里有很多事情要做。这是一个主要的Laravel和Angular应用程序,超过2700页,不包括供应商或节点文件夹(1700+Laravel,1000+Angular)

下面是浏览器控制台中$scope检查的$scope.data变量部分,以提供规模感

数据:m 美元承诺 : D $resolved : 真的 报警日期 : 无效的 反病毒州 : 无效的 分配给 : 104 上大学时间 : 0 自动预订 : 1. 订票费 : 无效的 预订费 : 无效的 建立 : 数组(0) 取消原因 : 无效的 客户 : 对象 客户识别码 : 53 客户端类型 : “客户” 收集于 : 无效的 完整的 : 0 已填妥 : 无效的 创建于 : "2016-12-07 11:23:03" 创建于 : 16 造物主 : 对象 客户通知 : 数组(0) 删除 : 无效的 交付 : 0 交付人 : 无效的 装置 : 数组(0) 直拨 : 无效的 到期日 : 无效的 交换id : 无效的 反馈 : 无效的 跟踪id : 无效的 格式化时间 : "" 格式化时间 : "" 身份证件 : 84222 发票号 : 无效的 发票 : 0 发票金额为 : 无效的 按项目开具发票 : 0 劳动 : 0 修饰语 : 对象 需要你的电话吗 : 0 需要送货吗 : 无效的 没有价格原因 : 无效的 没有理由 : 无效的 现场终端 : "0000-00-00 00:00:00" 现场启动 : "0000-00-00 00:00:00" 订单任务id : 无效的 支付 : 0 支付 : "2016-12-07" 部分 : 数组(0) 零件总数 : 0 通过测试 : 无效的 密码 : 数组(0) 大头针 : 无效的 要点 : 0 预录 : 0 预订日期 : "01-01-1970" 问题 : “已删除” 项目编号 : 无效的 qa_id : 无效的 qa_任务 : 数组(0) 相关任务 : 数组(0) 返回标识 : 无效的 修订历史 : 数组(0) 满意的客户 : 无效的 六翼天使 : 无效的 严重性 : 2. 架子 : 无效的 架子式 : 无效的 网站 : 对象 站点id : 53 网站用户 : 对象 站点\用户\ id : 535 标准价格 : 无效的 标准价格 : 无效的 地位 : 对象 身份证 : 1. 订阅用户 : 数组(0) 订户 : 数组(0) 子类型标识 : 1. 模板项目 : 数组(0) 模板 : 数组(0) 花费的时间 : 0 标题 : “为了纳迪姆” 类型 : “支持” 无人值守时间 : 0 更新地址 : "2016-12-07 11:24:04" 更新人 : 94 用户 : 反对

----------------编辑00.14-----------------

这里有一个loadData函数,它对LaravelAPI进行ajax调用,并将响应分配给$scope.data

$scope.loadData = function() {
    Tasks.get({taskId: $scope.taskId}, function(response){
        $scope.data = response;
        $scope.modified = false;
        CustomerNotificationsService.setNotifications(response.customer_notifications);
        $ClientsManager.setClient(response.client);
        $ClientsManager.setClientType(response.client_type);
        $scope.registerWatchers();
    }, ErrorsHandler);
};
其实简单的修复

只需在new$watch中查看我感兴趣的数据属性,并将对Page.setTitle的调用拉入其中

$scope.$watch('taskId', function(value) {
    if (value) {
        $scope.loadData();
    }
});

// set browser tab title prefix
$scope.$watch('data.type', function(value) {
    var browserTabTitlePrefix = undefined;
    if(typeof value != 'undefined') {
        browserTabTitlePrefix = $scope.getBrowserTabTitlePrefix(value);
        Page.setTitle(browserTabTitlePrefix + $scope.taskId);
    }
});
现在,因为我正在查看正确的属性,并且只在子函数(Page.setTitle)准备好后调用它,所以我很高兴


Alhamdulillaah katheerun

所有范围观察程序都执行一次,但范围尚未准备就绪。(将此视为一种初始化…)如果在作用域上监视
数据
,并在监视程序中设置断点,则第一次运行将使用未定义的值,但是第二次数据应该完全填充。您何时/何地分配$scope.data?@angabriel-如何设置断点以及如何知道$scope.data何时准备就绪?@Kossel$scope.data及其子属性分布在tasks.blade.php中-我使用atom搜索数据,共搜索了224次@OP:看这里,第二点“用断点暂停代码”。
archDB.factory('Page', function () {
    var title = 'Seraph';
    return {
        getTitle: function() { return title; },
        setTitle: function(newTitle) { title = newTitle; }
    };
});
$scope.loadData = function() {
    Tasks.get({taskId: $scope.taskId}, function(response){
        $scope.data = response;
        $scope.modified = false;
        CustomerNotificationsService.setNotifications(response.customer_notifications);
        $ClientsManager.setClient(response.client);
        $ClientsManager.setClientType(response.client_type);
        $scope.registerWatchers();
    }, ErrorsHandler);
};
$scope.$watch('taskId', function(value) {
    if (value) {
        $scope.loadData();
    }
});

// set browser tab title prefix
$scope.$watch('data.type', function(value) {
    var browserTabTitlePrefix = undefined;
    if(typeof value != 'undefined') {
        browserTabTitlePrefix = $scope.getBrowserTabTitlePrefix(value);
        Page.setTitle(browserTabTitlePrefix + $scope.taskId);
    }
});