对于以下小提琴https://jsfiddle.net/qcuennL5/,我想访问"元素"内部范围。$ watch(' $ select.isOpened',...)。我该怎么办?
scope.$watch('$select.isOpened', function(isOpened) {
if(isOpened) {
//Don't have access to 'element'. Hacked with $('...')
$('div.dropdown').show();
} else {
$('div.dropdown').hide();
}
答案 0 :(得分:2)
您可以访问element
参数。
从chrome调试器中,如果正在执行的函数中未使用被检查的属性,我们将无法检查闭包属性。
控制台语句将正确打印该值。
不确定这是否是Chrome错误。
答案 1 :(得分:2)
您不需要使用jQuery或观看范围内的任何对象。
只需像这样使用ng-show
指令......
ng-show="$select.isOpened"
<强> JS / TEMPLATE 强>
template: '<div class="select" ng-click="$select.click(\'I was clicked!\', $event)">' +
'<div class="select-label">{{title}}</div>' +
'<div class="select-caret"><span class="select-dropdown"></span></div>' +
'<div class="dropdown" ng-show="$select.isOpened">This is a dropdown!</div>' +
'</div>'
同时从CSS中的display
中删除div.dropdown
属性
<强> JSFIDDLE 强>
使用$ watch
scope.$watch('$select.isOpened', function (isOpened) {
scope.isOpened = isOpened; // assign isOpened to new variable on the scope.
// Stick the rest of your logic here
});
<强> HTML 强>
'<div class="dropdown" ng-show="isOpened">This is a dropdown!</div>'