- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想为 ng-show
使用一个需要首先评估的对象属性。
我有一个包含 lanOption
(语言)对象的数组,我想在 select
元素中显示它。是否显示语言取决于变量 couID(国家/地区),该变量也存在于范围内。
我想通过附加属性在对象中包含有关显示或隐藏语言的逻辑,然后由 ng-show
使用,如下所示:
$scope.lanOptions = [
{name: "English", ngShow: "1"},
{name: "Danish", ngShow: "$scope.couID='DK'"},
{name: "French", ngShow: "$scope.couID='FR' || $scope.couID='BE'"},
{name: "Dutch", ngShow: "$scope.couID='NL' || $scope.couID='BE'"}
]
(应始终显示英语,仅在选择丹麦时显示丹麦语等)
<select>
<option ng-repeat="o in lanOptions" ng-show="{{o.ngShow}}" value="{{o.name}}">{{o.name}}</option>
</select>
这里重要的部分是 ng-show
属性——有没有办法让它发挥作用?和/或我缺少更好的方法吗?我尝试过 filter:
,但没有成功。
谢谢!
<小时/>澄清一下:这个示例实际上非常简化为我实际想要做的事情。在我的实际问题中,还有更多变量值(可能)影响每个选项的可见性。
举个例子,考虑
{name: 'Basque', ngShow: "($scope.couID=='ES' || $scope.couID=='FR') && $scope.inclMinority==true"}
或
{name: 'German', ngShow: "$scope.couID=='DE' ||
$scope.couID=='AU' ||
($scope.couID=='BE' && $scope.inclMinority==true)"}
,或更复杂的表达式。
这就是为什么我不只是添加一个 couID
数组作为每个语言对象的属性 - 如果我之前没有明确提及这一点,我很抱歉。
最佳答案
用 $scope.
来修复模型 @ ngShow: "$scope.couID='DK'"}
中的作用域变量名称并不是一个好主意。如果您计划更改保存范围的变量名称,或者将此模型移植到某个地方,它将变得不可用,该怎么办?对属性名称 $scope.couID
进行条件检查的情况也是如此,(也许您将其添加为一种灵 active ,以便您可以放置要针对范围内的多个变量进行评估的过滤条件,例如 couID
并针对各种不同的条件)。但是,即使您在 ngShow 中使用插值,绑定(bind)中的条件表达式也不会被求值(可能您也可能会遇到语法错误)。
对 ng-show 使用插值也不是一个好主意,因为它会寻找真实的表达式,甚至字符串 "false"
也是如此(如果您使用 ng-使用 bool 值插值显示,在所有情况下都保留默认情况下不起作用的条件),最终将始终显示所有选项。
您应该不再使用 ng-repeat 来创建选择,而是开始使用 ng-options .
通过在模型中保留条件,您可以评估 ng-show 表达式,同时使用 $parse 获取项目本身。 ,为什么要为 ng-show
添加不需要的 watch ?:-
在 Controller 中注入(inject) $parse
以便根据范围解析表达式:-
.controller('MainCtrl', function($scope, $parse) {
//.....
//In your method just return only necessary dropdown values
$scope.getLanOptionsForCountry = function(){
//Just filter it based on selected country and populate the select.
return $scope.lanOptions.filter(function(itm){
return $parse(itm.ngShow)($scope);
});
}
//...
您的选择将如下所示:-
<!-- Just added for the demo to select a country -->
<select ng-model="couID" ng-options = "country.code as country.name for country in countries">
<option value="">--Choose one--</option>
</select>
<!-- This will be your selected, just added a placeholder option as well and an ngModel -->
<select ng-model="language" ng-options = "lang.name for lang in getLanOptionsForCountry()">
<option value="">--Choose one--</option>
</select>
<强> Plnkr - Demo
或者,您甚至可以通过删除 View 模型中的条件并为仅显示这些选项的国家/地区代码放置一个过滤器来使 View 模型更加可移植。
//Add a filter property which if present will display only for those country code else if will always display
$scope.lanOptions = [
{name: "English"},
{name: "Danish", filter: ["DK"]},
{name: "French", filter: ["FR", "BE"]},
{name: "Dutch", filter:["NL", "BE"]}
];
$scope.getLanOptionsForCountry = function(){
return $scope.lanOptions.filter(function(itm){
return !itm.filter || (itm.filter.indexOf($scope.couID) + 1);
});
}
<强> Plnkr2 - Demo
查看 polyfill 和对 Array.Filter 的支持
关于javascript - ng-show 需要 'double evaluate',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26208091/
我被卡住了,请重新审视这个问题。 我正在与其他人的意大利面条式代码一起工作,这些代码不再存在,并且有很多时间弄清楚他们正在评估什么。 在查询转储中,我看到
真实世界Haskell的第8章 globToRegex' (c:cs) = escape c ++ globToRegex' cs 这个函数不是尾递归的,它说答案依赖于 Haskell 非严格(惰性)
来自 Haskell,我正在阅读 Idris 关于懒惰(非严格)的故事。我翻了翻最近的发行说明,还有 found code类似于以下 myIf : (b : Bool) -> (t : Lazy a)
我正在读这个帖子 A custom find function并指出了这一点 有趣的结果。请注意,Evaluate 与 Application.Evaluate 相同,并且所需时间大约是 Active
R包裹mice带有以下示例: library("mice") imp <- mice(nhanes) fit <- with(data=imp,exp=lm(bmi~hyp+chl)) 我想要一个灵活
我正在尝试使用 PHPUnit 3.6.4 对我的 Zend Framework 应用程序进行单元测试。当我在命令提示符中尝试此命令时,出现以下错误。 C:\xampp\htdocs\testsamp
我希望函数的结果是: 所有值的计算结果均为 False(无、0、空字符串)-> True 所有值的计算结果为 True -> True 所有其他情况 -> 错误 这是我的尝试: >>> def con
我可以使用 puppeteer 导航到一个页面但后来page.evaluate没有返回任何响应。此外,我无法在 page.evaluate 内部进行调试。任何一个。我在 Debug模式下运行脚本( n
from surprise import Reader, Dataset, SVD from surprise import evaluate ----------------------------
使用 PhantomJS 考虑以下代码片段: var reloadAfterLogin = false; function(user, pass, debug){ // step 3 submit L
我知道流是惰性的,直到在流上调用终端方法。我所知道的是,在调用终端方法之后,所有中间方法都按调用顺序执行。 但是对于下面的程序,我无法理解流是如何工作的。这是代码,我试过了。 import java.
最近我开始研究 VS2012。 当我调试代码(这是 SharePoint 2013 应用程序)并尝试获取变量的值时 - 我一次又一次收到消息: Function evaluation disabled
我正在阅读 David Flanagan 的《JavaScript:权威指南》,这可能是世界上最厚的 JavaScript 书。在简要描述数组初始值设定项时,弗拉纳根说“每次数组初始值设定项时都会评估
在 puppeteer 截取屏幕截图之前,我试图让代码执行等待所有图像加载完毕。当调用 initData() 函数时,我的 DOM 被填充,该函数在客户端 js 文件中定义。延迟或超时是一种选择,但我
对国际通用标准有一些批评,如 [Under-attack]。 1 您认为使用 CC 开发 IT 产品的利弊是什么? 最佳答案 我是 BSI(德国)和 NIAPP(美国)计划的通用标准评估员。我有一些经
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 11 年前关闭。 Improve this
在非严格求值语言中,使用按名称调用与通过宏扩展调用有何区别和优点/缺点? 您能否提供一个示例来解释这两种评估策略? 谢谢! 最佳答案 按姓名调用: 按名称调用是一种求值策略,其中函数的参数在调用函数之
我真的无法在 Modelica 规范中找到任何答案,所以我想问问你们。规范指出如果表达式的值不影响结果(例如, bool 表达式的短路评估),工具可以自由地求解方程、重新排序表达式和不计算表达式。 I
我想尝试惰性表达式评估,但我现在不想深入研究 Haskel。拜托,你能帮忙找出其他语言有这个功能吗? 最佳答案 你可以用多种语言模拟它。 this例如,是 C++ 的通用惰性求值器。正如文章所说,它也
关注,据说foldl'是 foldl 的严格版本. 但是我很难理解,strict 是什么意思?意思是?? foldl f z0 xs0 = lgo z0 xs0 where
我是一名优秀的程序员,十分优秀!