Angularjs 对角度范围感到困惑。为什么这不能像预期的那样发挥作用?
这很令人困惑。。这是一张小提琴手的照片 Angular.copy适用于此示例,但会使用hot Towers datacontext.lookup.setLookups(true)方法导致(RangeError:超过最大调用堆栈大小)。知道为什么吗 从列表中选择U3,然后单击添加。 U3将从选择列表(下拉列表)中删除并添加到选择列表中。 U3将从其他下拉列表中删除 因此,它在全球范围内分享我的“单位”列表,以及我实际项目中的一些方法 如何将列表复制到特定控制器实例的包含范围中 我正在使用带有breeze.js的hottower.Angular模板。我想知道是否正在共享对缓存的查找值的引用。以下是实际获取单位列表数据的方法Angularjs 对角度范围感到困惑。为什么这不能像预期的那样发挥作用?,angularjs,angularjs-directive,angularjs-scope,Angularjs,Angularjs Directive,Angularjs Scope,这很令人困惑。。这是一张小提琴手的照片 Angular.copy适用于此示例,但会使用hot Towers datacontext.lookup.setLookups(true)方法导致(RangeError:超过最大调用堆栈大小)。知道为什么吗 从列表中选择U3,然后单击添加。 U3将从选择列表(下拉列表)中删除并添加到选择列表中。 U3将从其他下拉列表中删除 因此,它在全球范围内分享我的“单位”列表,以及我实际项目中的一些方法 如何将列表复制到特定控制器实例的包含范围中 我正在使用带有bre
<!-- the actual item detail controller -->
(function () {
'use strict';
var controllerId = 'itemdetail';
angular.module('app').controller(controllerId,
['common', 'datacontext', itemdetail]);
function itemdetail(common, datacontext) {
var vm = this;
var getLogFn = common.logger.getLogFn;
var log = getLogFn(controllerId);
vm.units = [];
vm.selectedUnit = undefined;
vm.selectedUnits = [];
activate();
function activate() {
common.activateController([initLookupValues()], controllerId)
.then(function () {
// log('Activated Controller' + controllerId,controllerId,true);
});
}
function initLookupValues() {
vm.units = datacontext.lookup.refreshUnitLookupCachedData(true);
}
}
})();
<!-- FROM repository.lookup.js ---->
function refreshUnitLookupCachedData(includeNullo) {
var predicate = breeze.Predicate.create('isLookUpValue', '==', true);
if (includeNullo) {
predicate = predicate.or(this._predicates.isNullo);
}
return this.lookupCachedData.units = this._getAllLocal(entityNames.unit, 'displayOrder', predicate);
}
<!-- FROM repository.abstract.js -->
function _getAllLocal(resource, ordering, predicate) {
return EntityQuery.from(resource)
.orderBy(ordering)
.where(predicate)
.using(this.manager)
.executeLocally();
}
(功能(){
"严格使用",;
var controllerId='itemdetail';
角度。模块('app')。控制器(controllerId,
['common','datacontext',itemdetail]);
函数itemdetail(公共、数据上下文){
var vm=这个;
var getLogFn=common.logger.getLogFn;
var log=getLogFn(controllerId);
vm.units=[];
vm.selectedUnit=未定义;
vm.selectedUnits=[];
激活();
函数激活(){
common.activateController([initLookupValues()],controllerId)
.然后(函数(){
//日志(“激活的控制器”+控制器ID,控制器ID,真);
});
}
函数initLookupValues(){
vm.units=datacontext.lookup.refreshUnitLookupCachedData(true);
}
}
})();
函数refreshUnitLookupCachedData(包括Ullo){
var predicate=breeze.predicate.create('isLookUpValue','=',true);
如果(包括乌洛){
谓词=谓词.or(this.\u predicates.isNullo);
}
返回this.lookupCachedData.units=this.\u getAllLocal(entityNames.unit,'displayOrder',谓词);
}
函数_getAllLocal(资源、顺序、谓词){
返回EntityQuery.from(资源)
.orderBy(订购)
.where(谓词)
.使用(此.manager)
.执行地();
}
我有一个将对象列表绑定到选择下拉框的指令。然后,当用户进行选择时,他们单击“添加”按钮,该项目将从“选择”列表中删除并添加到“选定”列表中。用户可以从选定列表中删除,并将其放回选定列表中
对于需要这些值的每个对象,将使用ng repeat为其呈现此select指令。ng repeat中的每个项都会获得另一个控制器的自身实例
因此,如果ng repeat渲染了10个对象,其中10个下拉列表将与其他输入控件一起渲染
如果我在第一个下拉列表中选择一个项目并将其添加到所选列表中。页面上的每个下拉列表都会更改(从下拉列表中删除项目并添加到选择列表)。即使每个渲染下拉列表都应该与该ng repeat项的特定控制器相关
我对示波器做了一些错误,但不知道是什么
<section id="admin-view" class="mainbar" data-ng-controller="myItemController as i">
<section class="matter">
<div class="container">
<div class="row">
<div id="itemFilter" >
<div data-dc-item-filter
items="i.itemPartials"
selected-item="i.selectedItem"
item-filter-text="i.itemSearch"
filtered-items="i.filteredItemPartials"
use-drop-down="false">
</div>
</div>
</div>
<div class="row"
ng-repeat="itemPartial in i.filteredItemPartials"
data-ng-controller="itemdetail as vm" >
<div class="widget>
<div data-cc-widget-header title="{{itemPartial.name}}"
allow-collapse="true"
is-widget-expanded="vm.isWidgetExpanded"></div>
<div class="widget-content collapse">
<div class="row" data-ng-click="$event.stopPropagation();">
<div id="solids" class="col-sm-8 col-md-7 col-lg-4">
<div class="widget">
<div data-cc-widget-header
title="Solid Options" nested-header="true"
allow-collapse="true"
is-widget-expanded="vm.isWidgetExpanded"></div>
<div class="row widget-content">
<div class="col-sm-4 col-md-4 col-lg-4">
<div data-dc-lookup-dropdown
title="Items:"
items="vm.myList"
selected-item="vm.selectedItem"
selected-items="vm.selectedItems">
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
</section>
itemdetail
控制器是什么样子的?我能想到的唯一一件事是,如果vm.myList
以某种方式引用了控制器实例共享的列表。你能创建一个小提琴来显示你的代码发生了什么吗?今晚我将添加小提琴手:-)。谢谢仍在处理fiddler,似乎无法获取带有select to bind的指令。当我得到它的工作,我会张贴一个链接。好的,我有一个解决方案。。。我可以用angular.copy解决这个问题。这是一个糟糕的解决方案吗?它会消耗客户机上的大量内存吗?它们是50个项目下的小列表。
<select class="form-control"
data-ng-options="(item.acronym !== undefined ? item.acronym : item.name) for item in items | filter:{selected: false}"
data-ng-model="selectedItem"
data-ng-disabled="disableSelect"
data-ng-change="onChange(item)"
ng-init="selectedItem = items[0]"></select>
<span class="input-group-btn">
<button class=" btn btn-info blue-tooltip"
data-ng-disabled="disableAddButton"
data-ng-click="addSelectedItem()">
<span class=" fa fa-plus"></span>
</button>
</span>
app.directive('dcLookupDropdown', [function () {
//Usage:
//<div data-dc-lookup-dropdown
// title="Units:"
// items="vm.mylist"
// selected-item="vm.selectedItem"
// selected-items="vm.selectedItems">
//</div>
var directive = {
controller: ['$scope', lookupDropDownController]
,scope: {
"title":"@"
,"items": "="
,"selectedItem": "="
,"selectedItems": "="
}
,restrict: 'A'
,replace: true
,templateUrl: 'app/templates/dc-lookupDropDown-template.html'
};
return directive;
function lookupDropDownController($scope) {
$scope.addSelectedItem = addSelectedItem;
$scope.removeSelectedItem = removeSelectedItem;
$scope.onChange = onChange;
$scope.disableAddButton = true;
$scope.disableSelect = false;
activate();
function activate() { }
function addSelectedItem() {
$scope.selectedItems.push($scope.selectedItem);
_disableOption($scope.items, $scope.selectedItem);
//sets dropdown back to nullo object
$scope.selectedItem = $scope.items[0];
$scope.disableAddButton = shouldDisableAddButton();
$scope.disableSelect = shouldDisableSelect();
}
function onChange(item) {
$scope.disableAddButton = shouldDisableAddButton();
}
function shouldDisableAddButton() {
return ($scope.selectedItem.id == 0);
}
function shouldDisableSelect() {
return ($scope.selectedItems.length == $scope.items.length - 1);
}
function removeSelectedItem(item) {
$scope.selectedItem = item;
for (var idx = $scope.selectedItems.length; idx--;) {
if ($scope.selectedItems[idx].id == item.id) {
$scope.selectedItems.splice(idx, 1);
}
}
_enableOption($scope.items, $scope.selectedItem);
//sets dropdown back to nullo object
$scope.selectedItem = $scope.items[0];
$scope.disableAddButton = shouldDisableAddButton();
$scope.disableSelect = shouldDisableSelect();
}
function _disableOption(itemList, selectedItem) {
if (selectedItem !== null) {
angular.forEach(itemList, function (item) {
if (item.id == selectedItem.id) {
item.selected = true;
return item;
}
return selectedItem;
}, selectedItem);
};
};
function _enableOption(itemList, selectedItem) {
if (selectedItem !== null) {
var foundItem = angular.forEach(itemList, function (item) {
if (item.id == selectedItem.id) {
item.selected = false;
return item;
}
return selectedItem;
}, selectedItem);
};
};
}
}]);