我正在观看$ 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: Array(81),$$ listeners:Object ...}
未定义
任何想法为什么$ scope似乎已经准备好并且可用,但它的变量不是??
这是初始化taskId变量的HTML,你可以看到这里有很多东西。这是一个主要的Laravel和Angular应用程序,超过2700页,不包括供应商或节点文件夹(1700+ Laravel,1000 +角)
<div ng-controller="TasksCtrl" ng-init="taskId = '{!! $task->id !!}'" ng-cloak>
<span ng-init="severities = {{ json_encode($severities) }}"></span>
<span ng-init="statuses = {{ $statuses }}"></span>
<span ng-init="users = {{ $users }}"></span>
<span ng-init="subtypes = {{ App\Modules\Bookings\TaskSubtype::support()->get() }}"></span>
<span ng-init="standard_prices = {{ StandardPrice::all() }}"></span>
<span ng-init="shelf_types = {{ json_encode(App\Modules\Bookings\Task::getShelfTypes()) }}"></span>
这是来自tasks.blade.php文件的摘录,该文件是页面的内容部分。
实际标题用于layouts.blade.php,它实际上设置了浏览器标签的标题, NOT 标题是任何“页面上”标题。
>head<
>meta charset="utf-8"<
>meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"<
<title ng-controller="TitleController" ng-cloak>{[{ Page.getTitle() }]}</title>
这是在taskId更改时调用的getTitle函数。
archDB.factory('Page', function () {
var title = 'Seraph';
return {
getTitle: function() { return title; },
setTitle: function(newTitle) { title = newTitle; }
};
});
这是来自浏览器控制台的$ scope检查的$ scope.data变量部分,以给出规模感。
数据:m $承诺 : d $解决 : 真正 alarm_date : 空值 antivirus_state : 空值 分配给 : 104 attended_time : 0 auto_booked : 1 预订费 : 空值 booking_fee_id : 空值 建立 : 阵列(0) cancelled_reason : 空值 客户 : 宾语 CLIENT_ID : 53 client_type : “客户” collected_at : 空值 完成 : 0 completed_at : 空值 created_at : “2016-12-07 11:23:03” 由...制作 : 16 创造者 : 宾语 customer_notifications : 阵列(0) deleted_at : 空值 交付 : 0 由某人交付 : 空值 设备 : 阵列(0) 直拨 : 空值 截止日期 : 空值 EXCHANGE_ID : 空值 反馈 : 空值 followup_id : 空值 formatedAttendedTime : “” formatedUnattendedTime : “” ID : 84222 发票编号 : 空值 发票 : 0 invoiced_at : 空值 invoiced_by_project : 0 劳工 : 0 修改 : 宾语 needs_calling : 0 needs_delivery : 空值 no_price_reason : 空值 nopassword_reason : 空值 onsite_end : “00:00:00” onsite_start : “00:00:00” order_task_id : 空值 支付 : 0 paid_at : “2016年12月7日” 部分 : 阵列(0) parts_total : 0 passed_qa : 空值 密码 : 阵列(0) 销 : 空值 点 : 0 prebook : 0 prebook_date : “01-01-1970” 问题 : “已移除” PROJECT_ID : 空值 qa_id : 空值 qa_tasks : 阵列(0) related_tasks : 阵列(0) return_id : 空值 修订记录 : 阵列(0) satisfied_client : 空值 seraph_id : 空值 severity_id : 2 架 : 空值 shelf_type : 空值 现场 : 宾语 SITE_ID : 53 site_user : 宾语 site_user_id : 535 standard_price : 空值 standard_price_id : 空值 状态 : 宾语 STATUS_ID : 1 subscribed_user : 阵列(0) 用户 : 阵列(0) subtype_id : 1 template_items : 阵列(0) 模板 : 阵列(0) 所花费的时间 : 0 标题 : “对于Nadeem” 类型 : “支持” unattended_time : 0 的updated_at : “2016-12-07 11:24:04” updated_by : 94 用户 : 对象
----------------编辑00.14 -----------------
这是一个loadData函数,它对laravel api进行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);
};
答案 0 :(得分:0)
实际上简单修复;
只需在新的$ 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