- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
HTML:
Filter:
<input type="radio" ng-model="Type" value="Rear"> Rear
<input type="radio" ng-model="Type" value="Front"> Front
<br>
Select:
<name-value-select entry="entry" field="axleType" options="filterTypes"></name-value-select>
指令:
.directive('nameValueSelect', function () {
return {
restrict: "E",
scope: {
entry: "=",
field: "@",
options: "=",
onInputChange: "&"
},
controller: function ($scope) {
$scope.onChange = function () {
console.log("selected changed");
$scope.entry.type = $scope.option.value;
$scope.onInputChange();
};
var getItemForValue = function (value) {
var item = null;
$scope.options.forEach(function (_option) {
if (_option.value == value) {
item = _option;
}
});
return item;
};
$scope.$watch("entry", function () {
console.log("entry changed");
$scope.option = getItemForValue($scope.entry[$scope.field]);
}, true);
},
template: '<select ng-model="option" ng-options="o.Description for o in options" ng-change="onChange()"><option value="" selected="selected">Please Select </option></select>'
}; })
Controller :
$scope.Description = '';
$scope.entry = {Description: ''};
$scope.Type = 'Front';
$scope.entry.type = '';
$scope.$watch('Type', function (Type) {
$scope.filterTypes = [];
$scope.axleTypes = new API.GetAxleTypes(function () {
angular.forEach($scope.axleTypes, function(axleType) {
if (axleType.Type == Type) {
this.push(axleType);
}
// if(!$scope.$$phase) $scope.$digest(); // tried this, does not have any affect
}, $scope.filterTypes); // '}, $scope.filterTypes, true)'--> did nothing for me here
});
$scope.filterTypes.sort(function (a, b) {
return a.Description.localeCompare(b.Description);
});
}); // '}, true)' --> did nothing for me here
问题:
自定义选择控件最初会填充类型为“Front”的项目,如果我将 Rear 设置为默认值,也会填充“Rear”。
但是,当在单选按钮之间切换时,不会调用 watch 函数,并且选择不会填充满足新选择的过滤器类型的项目。
///////////////////////////////////////////////////缩小问题范围:///////////////////////////////////////////////////
当把它移到一个独立的项目时,我发现我上面的代码有效:-(
这里是原始的 select NOT 作为自定义指令:
<select ng-model="$parent.selectedFrontAxle" ng-options="axleType.Description for axleType in axleTypes | filterByType: 'Front' | orderBy:'Description'" id="frontAxles" class="formRequire" required>
<option value="" selected>Select Axle Type ..</option>
</select>
这里是作为自定义指令的选择控件:
<name-value-select entry="entry" field="axleType" options="filterTypes"></name-value-select>
显然这是问题所在:"ng-model="$parent.selectedFrontAxle"
如果我采用指令“name-value-select”并将其移动到父页面,代替 include 语句,它就可以工作。
但这不是我想要的。所以我需要把它留在包含页面中。
但是,如果我使用 ng-model="$parent.selectedFrontAxle" 并将其添加到包含页面上的任何元素,则没有任何效果。
任何没有 ng-model="$parent.selectedFrontAxle" 的,仍然没有任何效果。
我可以看到问题的范围,但我不知道如何纠正它。
呃!!!仍然没有解决方案。
//
//
//////////////////////////////////////////////////////////// 马克·拉杰科克////////////////////////////////////////////////////////////
一如既往地感谢您的帮助。虽然,我认为我在第 2 点上没有说清楚我在某些情况下希望代码而不是用户进行预过滤。不过我想通了。因此,对于任何希望通过指令抽象出控件的人,并且在这种情况下,过滤过程由用户和代码执行,这里是 plunker 解决方案:
最佳答案
在this plunker ,我修改了代码以允许用户选择“Rear”或“Front”,并且选择列表将动态更新。所选值在 MainCtrl 范围内作为 $scope.selected.item
可用。 (我删除的指令中有很多不必要的代码。使用 ng-model 时不需要 onChange 处理程序。)
<name-value-select selected-item="selected.item" options="filterTypes">
</name-value-select>
app.directive('nameValueSelect', function () {
return {
restrict: "E",
scope: {
selectedItem: "=",
options: '='
},
template: ...
由于 ng-include 创建了一个子范围,所有原始属性都被转换为对象属性,因此 JavaScript 原型(prototype)继承将按预期工作(即,当值更改时, MainCtrl 中定义的 $scope 对象将更改而不是新的在本地范围内创建原始属性)。
我相信上面提到的 plunker 会满足您的“第 1 点”。
我现在将着眼于为“第 2 点”创建一个 plunker...(我会在更新此答案时添加评论)。
This plunker过滤指令中的选择列表:
<name-value-select selected-item="selected.item" choice="choice.type"
options="myTypes"></name-value-select>
app.directive('nameValueSelect', function () {
return {
restrict: "E",
scope: {
selectedItem: "=",
choice: "=",
options: "=",
},
controller: function($scope) {
$scope.$watch('choice', function (selectedType) {
$scope.selectedItem = ''; // clear selection
$scope.filterTypes = [];
angular.forEach($scope.options, function (type) {
if (type.Type === selectedType) {
this.push(type);
}
}, $scope.filterTypes);
$scope.filterTypes.sort(function (a, b) {
return a.Description.localeCompare(b.Description);
});
});
},
template: '<select ng-model="selectedItem" ' +
'ng-options="o.Description for o in filterTypes">' +
'<option value="" selected="selected">Please Select</option>' +
'</select>'
};
});
关于javascript - Angular : $watch not triggered on change ($scope issue with include page),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16158474/
我不知道我做了什么来破坏我的 QtCreator,但是“突然”我所有的编译器问题(警告/错误)不再显示在问题面板中,而是只显示在“编译输出”面板中(我在那里不能使用它们通过单击跳转到错误代码)。 在“
我正在制作游戏作为自学。 我的目标是在鼠标指针后面有一条轨迹。(这有效)但是,当我在 chrome 上打开并运行它时。在达到一定的高度和宽度后,轨迹保留在 Canvas 上而不是被擦掉。谁能帮我解决这
我希望通过在我的HTML文件中适当地格式化我的网站上的文本来增强它的外观。具体地说,我希望确保我的HTML文件中的代码在网站上显示得很好。此外,我正在寻求帮助实现我的网站导航栏。,我希望和其他内容显示
我希望通过在我的HTML文件中适当地格式化我的网站上的文本来增强它的外观。具体地说,我希望确保我的HTML文件中的代码在网站上显示得很好。此外,我正在寻求帮助实现我的网站导航栏。,我希望和其他内容显示
我希望通过在我的HTML文件中适当地格式化我的网站上的文本来增强它的外观。具体地说,我希望确保我的HTML文件中的代码在网站上显示得很好。此外,我正在寻求帮助实现我的网站导航栏。,我希望和其他内容显示
我一直在尝试将背景图像添加到 html 文档中元素的边框: 你可以在这里看到:HTML: Something CSS: a { border-width:10px; border-co
我即将开始一个连接两个程序的项目,一个用c#,一个用c++。我已经有一个可以工作的 c# 程序,它能够与自身的其他版本对话。在开始使用c++版本之前,我想到了一些问题: 1) 我正在使用 protob
我正在尝试线程优先级的影响,当 run 方法中的 println 保留在注释中时,两个线程同时结束,我不理解这种行为,你能解释一下吗?谢谢。 主类 public class Main { public
jQuery 1.4: $('#menu li:last:not(.ignore)').addClass('last'); HTML: item 1 ite
当我创建或查看问题时,我想从Mantis问题跟踪系统中删除选择配置文件及其所有随附字段,因为这些问题与我要创建的任何问题都不相关。 其中包括配置文件部分随附的“平台”,“操作系统”和“操作系统版本”字
我不在Master分支上工作。我正在开发另一种newFeature,该功能也发布在github上。 我知道在处理Master分支时如何解决问题:Closes #XXX。 但是,这仅在我在Master分
我需要在一些UICollectionViewCell中画一个圆圈。具有不同颜色边框和背景颜色的圆圈。我的代码。 UICollectionViewController - (UICollectionVi
我们将Trac用于我正在从事的开源项目。我想将所有公开票导出到Github的Issues。我已经找到了一些可能的小型脚本,但是我想知道是否有人这样做并提出了建议。 理想情况下,它将trac的描述语法转
我对 iOS 编程还比较陌生,但在其他语言(主要是 C# 和 Java)方面拥有丰富的编程经验。 我正在尝试为 iPad 设备的某些产品制作一个类似图片库的东西,其中包含指定的类别。用户界面非常简单,
我已经在中间人中激活了 I18n,如下所示: activate :i18n, mount_at_root: :de 现在我想自动从 / 重定向到 /de。这可能吗? 另外,我想知道为什么中间人使用 p
我已经成功编写了一个程序,可以从 Excel 文件中读取数据并将它们存储在 mysql 的表中。我的程序读取每个文件的第一行,创建表的字段,并将其余数据存储为每列中的值。正是因为这种情况以编程方式发生
这是我的代码。 function m1() { return new Promise(function(resolve, reject) { var files = $('#aws-upl
谁能告诉我这是怎么回事? #include #include #include #include #include class writeManager { std::vector
compile 'com.github.RogaLabs:social-login:1.2.1' compile 'com.github.mukeshsolanki:social-login-help
我有一个巨大的 csv 文件,其中包含 149 列 和 25K+ 行,可以在 MySQL 中上传该文件> 我正在使用MySQL LOAD DATA 查询 表我的查询是: LOAD DATA local
我是一名优秀的程序员,十分优秀!