AngularJS:将目标(类似于焦点)设置为任何$scope属性
AngularJS: set target (similar to focus) to any $scope property
我有一个包含多个元素的布局,这些元素能够获得目标。我一次只需要定位一个元素。是否可以在$scope上定义一个函数,该函数从模型接收对象(例如属于发票的行项目),并告诉 Angular 在此模型视图所在的位置添加 css 类?
如果我使用 ng-class指令,它会迫使我将 ng-class 添加到 html 中的所有"可定位"元素中,并且每个元素都应该知道它是否是当前目标。我不想为每个可能的元素添加一个isTarget()函数,因为它会弄脏模型。
例:这是 html:
<p>{{document.shipFrom}}</p>
<p>{{document.shipTo}}</p>
<ul>
<li ng-repeat="item in document.items">{{item.description}}</li>
</ul>
这是控制器:
angular.module('myApp').controller('DocumentCtrl', function($scope){
$scope.document = {
shipFrom: 'Origin',
shipTo: 'Destination',
items: [
{description:'item1'},
{description:'item2'}
]
};
})
有没有办法定义$scope.setTarget($scope.document.items[0]),以便它向元素添加一个"on-target"类?请注意,所有文档属性(物料和发货自/收件人)都可以获得目标。
编辑:已解决
我找到了一种在指令的链接函数中获取模型属性值的方法。如果我使用 $parse 服务,那么我只需实例化一个 getter 函数即可评估附加到指令的模型属性:
link: function postLink ($scope, $iElement, $iAttrs) {
var valueGetter = $parse($iAttrs.ngModel);
//Then, I can subscribe the directive to a custom event:
$scope.$on('set.target', function (event, elem) {
$iElement.removeClass('on-target alert-info');
//Now it gets the actual value of the model related to the directive
var value = valueGetter($scope);
//If both the model and the event's value are the same, then focus the element.
if (value == elem) {
$iElement.addClass('on-target alert-info');
$scope.setTarget(valueName, elem);
$scope.$apply();
}
return;
});
}//end link function
当我需要一些东西从控制器获得目标时,我只是做$scope.$broadcast('set.target', $scope.document.shipFrom)
HTML 部分 :
<p>{{document.shipFrom}}</p>
<p>{{document.shipTo}}</p>
<ul>
<li ng-repeat="item in document.items" ng-click="setTarget(item.description)" ng-class="{'active' : selectedTarget == item.description}">{{item.description}}</li>
</ul>
控制器:
$scope.document = {
shipFrom: 'Origin',
shipTo: 'Destination',
items: [
{description:'item1'},
{description:'item2'}
]
};
$scope.selectedTarget = '';
$scope.setTarget = function(data) {
$scope.selectedTarget = data;
};
演示
如果你不想为每个可能的项添加一个isTarget()函数,你可以在文档上添加isTarget方法。
isTarget: function(item){
return this.target === item;
}
并将 html 更改为
<li ng-repeat="item in document.items" ng-class="{'on-target': document.isTarget(item)}">{{item.description}}</li>
相关文章:
- 是否有任何设置阻止JavaScript在系统上工作
- 是否有任何内置方法可以更改JavaScript对象'的属性设置为某个值
- 如何将按钮的数据属性设置为输入[type=text]中设置的任何值
- 为什么为我的数据表设置类没有任何作用
- 智能表通过ng模型设置值时不会触发任何事件
- 如何将变量设置为给定时刻数组的值,而不是数组的任何值
- 是否有一种本机方法可以将字符串从任何区域设置转换为数字
- 在任何时候,将 Active 属性设置为主干集合中的 1 个模型
- 如何设置任何页面的透明背景
- 如果未选中任何复选框,请将状态设置为 0
- 如何使用 JavaScript 单击“任何”按钮时设置标签的焦点
- AngularJS:将目标(类似于焦点)设置为任何$scope属性
- jQuery 如何将 CSS 转换属性设置为任何对象
- 融合表 最大查询数 将数据设置为 0 IF 不返回任何行
- ng-bind在API调用设置数据后不显示任何内容
- NodeJS在I'我没有设置任何
- 提前输入,不要建议设置任何东西
- JQuery Mobile datepicker在设置任何选项时都会丢失主题
- 如何设置任何DOM元素的显示值
- 是否有一种方法可以在烬存储中设置任何烬模型更改的观察者