Javascript 为什么指令之间的作用域不连接?
我有关于下拉列表的指令: dropdown.html:Javascript 为什么指令之间的作用域不连接?,javascript,jquery,html,angularjs,drop-down-menu,Javascript,Jquery,Html,Angularjs,Drop Down Menu,我有关于下拉列表的指令: dropdown.html: <div class='dropdown-container' ng-class='{ show: listVisible }'> <div class='dropdown-display insetShadow' ng-click='show();' ng-class='{ clicked: listVisible }'> <span ng-if='!isPlaceholder'>
<div class='dropdown-container' ng-class='{ show: listVisible }'>
<div class='dropdown-display insetShadow' ng-click='show();' ng-class='{ clicked: listVisible }'>
<span ng-if='!isPlaceholder'>{{ display }}</span>
<span class='placeholder' ng-if='isPlaceholder'>{{ placeholder }}</span>
<i class='fa fa-angle-down'></i>
</div>
<div class='dropdown-list'>
<div>
<div ng-repeat='item in list' ng-click='select(item)' ng-class='{ selected: isSelected(item) }'>
<div>
<span>{{property !== undefined ? item[property] : item}}</span>
<i class='fa fa-check'></i>
</div>
</div>
</div>
</div>
</div>
用法:
<dropdown placeholder='' list='actions' selected='' property='title' value='id' style='width:150px;'></dropdown>
不工作(不知道为什么):
工作:
$scope.obj = {};
$scope.obj.savedValue;
<dropdown placeholder='' list='dataList' selected='obj.savedValue' property='title' value='id'></dropdown>
$scope.obj={};
$scope.obj.savedValue;
常见的dot问题。不能修改嵌套范围中的简单字符串。
在plunk中,让我们进行一些修改,添加第二个下拉列表:
<dropdown ng-repeat="i in [1, 2]" style='width:150px;' placeholder='' list='dataList' selected='savedValue' property='title' value='id'></dropdown>
selected: {{ savedValue }}
所选:{savedValue}
人们期望看到的是两个相连的下拉列表——但这并没有发生。Ng repeat为每个元素创建嵌套作用域,savedValue成功传递给子作用域,但子作用域无法修改它。
因此,您需要使用一些包装器:
<dropdown ng-repeat="i in [1, 2]" style='width:150px;' placeholder='' list='dataList' selected='o.savedValue' property='title' value='id'></dropdown>
selected: {{ o.savedValue }}
所选:{o.savedValue}
然后它就起作用了:
将您的示例简化到最低限度,您的问题是什么?抱歉,抛出50行代码并说您的指令“不起作用”对我来说毫无意义。当我在其他指令中使用时,当我在“选定”中使用范围变量保存选择时,它不起作用。我在此处复制了您的代码:什么不起作用?您能在Plunker中复制它吗?对人们来说帮助会容易得多。对未来有用。我会记得的。但这不是问题,作用域变量发生变化,我在{{}操作符上显示它,但无法捕捉$scope。$watch=>不工作,不知道为什么。若我按照建议使用对象包装器,那个么它是可以工作的,但我想弄清楚为什么并没有包装器对象就不能工作。
$scope.obj = {};
$scope.obj.savedValue;
<dropdown placeholder='' list='dataList' selected='obj.savedValue' property='title' value='id'></dropdown>
<dropdown ng-repeat="i in [1, 2]" style='width:150px;' placeholder='' list='dataList' selected='savedValue' property='title' value='id'></dropdown>
selected: {{ savedValue }}
<dropdown ng-repeat="i in [1, 2]" style='width:150px;' placeholder='' list='dataList' selected='o.savedValue' property='title' value='id'></dropdown>
selected: {{ o.savedValue }}