当前位置: 首页 > 面试题库 >

如何在子作用域中通过指令设置角度控制器对象属性值

公羊瀚
2023-03-14
问题内容

我在ng-repeater内部有一条指令,应该设置一个scope属性。请在此处查看小提琴:http: //jsfiddle.net/paos/CSbRB/

问题是范围属性是作为属性值给出的,如下所示:

<button ng-update1="inputdata.title">click me</button>

该指令应该将范围属性inputdata.title设置为某些字符串。这不起作用:

app.directive('ngUpdate1', function() {
    return function(scope, element, attrs) {
        element.bind('click', function() {
            scope.$apply(function() {
                scope[ attrs.ngUpdate1 ] = "Button 1";
            });
        });
    };
});

但是,直接分配有效:

scope["inputdata"]["title"] = "Button 1";

您能告诉我如何使用来设置作用域属性吗?指令名称中的符号?

PS:提琴使用中继器的原因是因为它使指令位于子范围内。当它们在子作用域中时,您不能写入原始的作用域属性。这就是为什么我需要带有“。”的对象属性。在名字里。
谢谢


问题答案:

$ parse将解决您的问题。

<button ng-update1="inputdata.title">



app.directive('ngUpdate1', function($parse) {
    return function(scope, element, attrs) {
        var model = $parse(attrs.ngUpdate1);
        console.log(model(scope));  // logs "test"
        element.bind('click', function() {
           model.assign(scope, "Button 1");
           scope.$apply();
        });
    };
});

小提琴

只要指令不使用隔离范围,而您使用属性指定范围属性,并且想要修改值,请使用$parse

如果不需要修改值,则可以使用$eval

console.log(scope.$eval(attrs.ngUpdate1));


 类似资料:
  • 问题内容: 如何在指令中设置插值?我可以从以下代码中读取正确的值,但无法设置它。 js: HTML: 我的控制器范围内的值在哪里? 问题答案: 如果要在范围上设置值,但不知道属性名称(提前),则可以使用以下语法: 如果属性中的字符串包含点(例如),则将无法使用;您可以用来做作业: 如果使用隔离范围,则可以使用批注: 您可以在此Angular /jQuery颜色选择器JSFiddle示例中看到一个示

  • 问题内容: 我试图弄清楚控制器继承是如何工作的。我有三个控制器: 和我的看法 但它们都显示“主要”。我该如何解决? 这是一个小提琴http://jsfiddle.net/g3xzh4ov/3/ 问题答案: 这是一个如何在Angular中扩展控制器的示例。 它要求使用,它取代有,它是这样的情况特别好。 注意,它是在幕后使用的,而不是其他Angular服务类型的用法,因此可以将语句从控制器直接带到单独

  • 装饰器允许我们在指令的host元素上编程设置属性值。 它类似于模板中定义的属性绑定,除了它专门定位到host元素。 对每个变化检测周期检查绑定,因此如果需要,它可以动态地改变。 注意,对于的两个用例,我们传递一个字符串值到我们想要改变的属性。如果我们不向装饰器提供字符串,那么将使用类成员的名称。

  • 问题内容: 我有一个带有一系列对象属性的对象,这些对象属性具有以下相似的结构(这是从服务返回数据的方式): 当我执行ng-repeat时,我可以遍历所有这5个对象,例如: 但是, 我真正想要做的是仅对那些不是“ foo”类型的项进行迭代 ,即3次迭代而不是5次。我知道可以以某种方式利用过滤器来执行此操作,但是我不确定如何执行。我尝试了以下方法: 但这不起作用。实际上,即使执行以下操作以将对象限制为

  • 问题内容: 谈话很便宜,请先显示我的代码: HTML: 指示: }); 控制器: 现在工作了,当我单击加号图标时,浏览器控制台输出“添加”。 但我想将控制器动态设置为指令,如下所示: HTML: 控制器: 指令喜欢: 如何实现我的目标?感谢您的回答! 问题答案: 现在可以使用AngularJS。在指令中你只需要添加两个新的属性叫 ,财产,也正好在这里需要。 指令中要注意的重要事项 设置指令动态控制

  • 问题内容: 我需要动态设置JS对象属性名称。 结果应为: 问题答案: