我正在尝试从我的自定义指令中获取一个 评估的 属性,但是我找不到正确的方法。
我已经创建了这个jsFiddle来详细说明。
<div ng-controller="MyCtrl">
<input my-directive value="123">
<input my-directive value="{{1+1}}">
</div>
myApp.directive('myDirective', function () {
return function (scope, element, attr) {
element.val("value = "+attr.value);
}
});
我想念什么?
注意:我会找到更好的解决方案来更新此答案。 只要它们仍然相关,我也会保留旧答案以供将来参考。最新最好的答案是第一位的。
angularjs中的指令功能非常强大,但是要花些时间来了解它们背后的进程。
创建指令时,angularjs允许您创建一个 隔离范围 ,并与父范围进行一些绑定。这些绑定由指定的 属性 ,你附加元素在DOM和你如何定义
范围 在属性 指令定义对象 。
您可以在范围内定义3种类型的绑定选项,并将它们写为与前缀相关的属性。
angular.module("myApp", []).directive("myDirective", function () {
return {
restrict: "A",
scope: {
text: "@myText",
twoWayBind: "=myTwoWayBind",
oneWayBind: "&myOneWayBind"
}
};
}).controller("myController", function ($scope) {
$scope.foo = {name: "Umur"};
$scope.bar = "qwe";
});
的HTML
<div ng-controller="myController">
<div my-directive my-text="hello {{ bar }}" my-two-way-bind="foo" my-one-way-bind="bar">
</div>
</div>
在那种情况下,在指令的范围内(无论是在链接函数还是在控制器中),我们可以像下面这样访问这些属性:
/* Directive scope */
in: $scope.text
out: "hello qwe"
// this would automatically update the changes of value in digest
// this is always string as dom attributes values are always strings
in: $scope.twoWayBind
out: {name:"Umur"}
// this would automatically update the changes of value in digest
// changes in this will be reflected in parent scope
// in directive's scope
in: $scope.twoWayBind.name = "John"
//in parent scope
in: $scope.foo.name
out: "John"
in: $scope.oneWayBind() // notice the function call, this binding is read only
out: "qwe"
// any changes here will not reflect in parent, as this only a getter .
由于此答案已被接受,但存在一些问题,因此我将其更新为更好的答案。显然,这$parse
是一项不位于当前范围属性内的服务,这意味着它仅采用角度表达式而无法达到范围。
{{
,}}
表达式是在angularjs启动时编译的,这意味着当我们尝试在指令postlink
方法中访问它们时,它们已经被编译。({{1+1}}
已经2
在指令中)。
这是您要使用的方式:
var myApp = angular.module('myApp',[]);
myApp.directive('myDirective', function ($parse) {
return function (scope, element, attr) {
element.val("value=" + $parse(attr.myDirective)(scope));
};
});
function MyCtrl($scope) {
$scope.aaa = 3432;
}
。
<div ng-controller="MyCtrl">
<input my-directive="123">
<input my-directive="1+1">
<input my-directive="'1+1'">
<input my-directive="aaa">
</div>
您应该在这里注意到的一件事是,如果要设置值字符串,则应将其用引号引起来。(请参阅第3输入)
这是玩的小提琴:http :
//jsfiddle.net/neuTA/6/
对于那些可能像我一样被误导的人,我并没有删除它,请注意,使用它$eval
是正确的正确方法,但$parse
行为有所不同,在大多数情况下,您可能不需要使用它。
再次使用方法scope.$eval
。它不仅可以编译角度表达式,还可以访问当前范围的属性。
var myApp = angular.module('myApp',[]);
myApp.directive('myDirective', function () {
return function (scope, element, attr) {
element.val("value = "+ scope.$eval(attr.value));
}
});
function MyCtrl($scope) {
}
你所缺少的是$eval
。
http://docs.angularjs.org/api/ng.$rootScope.Scope#$eval
在当前范围内执行表达式,返回结果。表达式中的任何异常都会传播(未捕获)。这在评估角度表达式时很有用。
问题内容: 我可以创建自定义属性并将其应用到normal ,如下所示: 我的问题:是否可以在不创建扩展类的情况下读取这些自定义属性的值?我的意思是,我想从我的中读取自定义属性,但是到目前为止,我所看到的示例要求我从自定义视图的构造函数中读取值 问题答案: 我的问题:是否可以在不创建扩展EditText的类的情况下读取那些自定义属性的值? 是的,您无需扩展类即可获取这些属性。为此,你可以使用一个特殊
我使用woocommerce插件创建了一个可变产品。在变量产品中,我创建了一个自定义属性“License Duration”,其值为“3个月| 6个月| 1年|寿命”。 现在我想在一个定制的单一产品模板上显示这个属性。 我试过以下解决方法 1. 这显示了
但是,我只能访问有关用户的基本信息,例如GivenName和Surname。我在Azure门户中创建了名为“extension_e3f9d0....”的扩展属性。 问题是,我不知道如何访问属性,一旦用户登录。当我调用Postman中的API时,可以检索这些自定义属性,如下所示: https://graph.microsoft.com/v1.0/users/[user@whatever]?$sele
问题内容: 在Woocommerce中,我试图获取产品自定义属性值,但我失败了,我一无所获。 所以我尝试了: 我正在获取这些原始数据: 我知道有一个值,因为它显示在属性部分,但是我只是找不到一种方法来将其显示在我的自定义代码中。 问题答案: 编辑* : 自Woocommerce版本3起已弃用 * 按照@datafeedr在他的答案中写道: 甚至更紧凑: 原始答案:
在WooCommerce中,我试图获得产品自定义属性值,但我失败了,什么也得不到。 所以我试着: 我得到了这些原始数据: 我知道有一个值,因为它显示在属性部分,但我就是找不到一种方法用我的自定义代码显示它。
假设我有几个指令:“戏剧”、“喜剧”,出于某种原因,它们有很多不同的属性,所以有一个“电影”指令并不一定有意义。有没有一种方法可以根据范围变量动态评估指令?大致如下: 它的评估结果如下: 我是Angular的新手,所以请原谅疯狂的想法。 更新:实际上我刚刚发现了一篇关于完全相同的问题/解决方案的文章:http://onehungrymind.com/angularjs-dynamic-templa