AngularJs指令:value from cookie不适用于数据绑定
AngularJs directive: value from cookie does not apply to data binding
我已经创建了指令,其中包含用户分配到的组织的下拉列表:
.directive('orgList', ['$rootScope', '$state', 'Auth', 'ipCookie', function ($rootScope, $state, Auth, ipCookie) {
return {
restrict: 'A',
replace: true,
template: '<div class="form-group"><div class="input-group">'+
'<span class="input-group-addon"><b>My orgs</b></span>'+
'<select class="form-control" ng-model="selectedOrg"'+
'ng-options="org.name for org in orgs"></select>'+
'</div></div>',
link: function(scope, elem, attrs) {
scope.orgs = Auth.user.organizations;
scope.selectedOrg = ipCookie('selectedOrg') || _.first(scope.orgs);
scope.$watch('selectedOrg', function (value) {
if(!_(value).isEmpty()) {
ipCookie('selectedOrg', value);
var temp = {
role: Auth.userRoles[value.role] || Auth.user.role
}
_(Auth.user).extend(temp);
$rootScope.$broadcast('userRoleChanged', value.id);
}
});
scope.$on('userRoleChanged', function (event, id) {
if(!Auth.authorize(Auth.accessLevels.admin)) {
if($state.current.url.match('/organization/')) {
$state.go('private.profile');
}
}
});
}
}
}
}])
现在我想让它记住用户选择:当用户在下拉菜单中选择组织时,在页面重新加载后,我希望他从cookie中看到相同的组织。
问题是什么:
scope.selectedOrg = ipCookie('selectedOrg') || _.first(scope.orgs);
如果没有定义cookie并且选择了_.first(scope.orgs)
部分,则下拉框显示组织,但是如果我从cookie中获取值,则下拉框显示空文本。console.log()
显示在两种情况下所选择的选项都是正确的。
最可能的原因是对象身份。
这意味着从ipCookie()
服务中检索到的值可能与orgs
列表中的值具有相同的内容(即字段是相同的,如果逐个比较),但对象本身在Javascript a === b
意义上是不同的。事实上,Angular被配置为使用JS的相等比较。
您可以:
-
尝试添加
track by
子句:<select ... ng-options="org.name for org in orgs track by org.id">
-
如果
ipCookie('selectedOrg')
返回一个值,不要把它放在scope.selectedOrg
;相反,在orgs
列表中搜索该特定对象,并将该对象放在scope.selectedOrg
中。
相关文章:
- html5 drawImage适用于firefox,而不是chrome
- Jquery Ajax POST不工作.适用于GET
- 如何调试遗留的javascript代码(适用于IE,但在Google Chrome中不正常)
- .load()适用于window,而不是ID
- 使用Jquery更改css样式适用于id's、 不在课堂上
- 提交按钮不会;不适用于Chrome或Firefox,但适用于Internet Explorer
- 为什么 javascript 中的“btoa”编码适用于 20 位字符串而不是 20 位整数
- Javascript String to Date适用于Chrome,而不是FF或Safari
- Onchange,向上,向下箭头键适用于FF和Chrome,但在IE中不起作用
- .load() 适用于 IE 和 dreamweaver 预览版,但不能使用 opera 和 chrome
- 找不到适用于 Highcharts 的 JSON 数组语法
- 为什么在jQuery中使用focusout适用于Firefox,而使用addEventListener则不适用;t
- jQuery选择菜单验证器适用于FF和Chrome,但不适用IE
- 单选按钮'onclick'适用于Chrome和Firefox,但不适用IE
- JQuery ScrollTop适用于chrome,但不适用firefox
- window.opener.location.href适用于IE,但不适用Chrome或Safari
- Frame Busting buster不完全适用于IE
- Jquery touch punch适用于Chrome和Firefox,但不适用IE
- 背景更改仅适用于chrome+$.预加载不适用;不起作用
- JavaScript window.location.replace适用于Firefox,但不适用IE或Chrome