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

如何在AngularJs的指令中修改范围

岳意蕴
2023-03-14
问题内容

我需要从指令内的回调中修改根范围属性。但是,该指令位于由switch指令创建的内部范围内。

HTML

<div ng-app="app" ng-controller='AppController'>
    <p>Selected: {{ selected }}</p>
    <div ng-switch on="selected">
        <div ng-switch-default>
            <p>Item: {{ selected }}</p>
            <custom-tag selected-item="selected" />
        </div>
        <div ng-switch-when="New value">
            <p>Worked</p>
        </div>
    </div>
</div>

JavaScript

angular.module('app', [])    
    .directive("customTag", [function () {
    return {
        restrict: "E",
        replace: true,
        template: "<input type='button' value='Click me' />",

        link: function (scope, element, attrs) {
            element.bind('click', function () {
                scope[attrs.selectedItem] = "New value";
                scope.$apply();
            });
        }
    };
}]);

function AppController($scope) {
    $scope.selected = 'Old value';
}

小提琴:http://jsfiddle.net/nJ7FQ/

我的目标是能够在“选定区域”中显示“新值”。我该如何完成我想做的事情?我究竟做错了什么?

此外,我正在尝试制作一个组件。有没有办法做到这一点,但要隔离范围?


问题答案:

我更新了小提琴,基本上不得不去父级来获取正确的“选定”变量,还使用了isolate scope =来获得传入的值和内部模型之间的双向绑定。

http://jsfiddle.net/nJ7FQ/2/

angular.module('app', [])

    .directive("customTag", [function () {
    return {
        restrict: "E",
        replace: true,
        template: "<input type='button' value='Click me' />",
        scope: {model:'='},

        link: function (scope, element, attrs) {
            element.bind('click', function () {
                scope.model[attrs.selectedItem] = "New value";
                scope.$apply();
            });
        }
    };
}]);

function AppController($scope) {
    $scope.selected = 'Old value';
}

HTML

<div ng-app="app" ng-controller='AppController'>
    <p>Selected: {{ selected }}</p>
    <div ng-switch on="selected">
        <div ng-switch-default>
            <p>Item: {{ selected }}</p>
            <custom-tag selected-item="selected" model="$parent" />
        </div>
        <div ng-switch-when="New value">
            <p>Worked</p>
        </div>
    </div>
</div>

更新了jsfiddle以使用属性中的原始读取属性:http ://jsfiddle.net/nJ7FQ/4/



 类似资料:
  • 问题内容: 我喜欢使用指令制作自定义组件。我检查了很多教程,它使我感到困惑,任何人都可以解释指令的工作原理。我计划制造的组件是 呼喊列表的模板将像这样 问题答案: 这是您的指令,带有一些内联注释: 和模板文件: 现在,您可以在代码中使用它,如下所示: 控制器: 视图: 希望这可以帮助!

  • 问题内容: 我尝试编写一个小指令,以将其内容包装在另一个模板文件中。 这段代码: 应该有以下输出: 因为布局“默认”具有以下代码: 这里的指令代码: }); 我的问题: 例如,当我在模板(在布局模板中或在布局标签内部)中使用范围变量时。它只是最初工作。如果我更新变量,则该指令不再更新。整个链接功能只会被触发一次。 我认为,AngularJS不知道,该指令使用范围变量,因此不会被更新。但是我不知道如

  • 我仔细阅读了关于这个主题的AngularJS文档,然后随意修改了一个指令。小提琴在这里。 下面是一些相关的片段: > 来自HTML: 在窗格指令中: 有几件事我不明白: 为什么必须使用与和与? 是否也可以直接访问父范围,而不使用属性装饰元素? 文档说“通常希望通过表达式将数据从独立作用域传递到父作用域”,但这似乎也适用于双向绑定。为什么表达式路由会更好? 我找到了另一个显示表达式解的fiddle:

  • 那么,的目的是什么?不能访问通过传递的所有属性。为什么一个max的访问值不能作为而不是 为什么要像那样分配回来? 谢了。

  • 问题内容: 在AngularJS中对隔离范围进行单元测试的好方法是什么 JSFiddle显示单元测试 指令段 我想,以确保指令监听的变化-这确实 不是 工作,一个孤立的范围: 更新: 我通过检查是否将预期的观察者添加到了子作用域中来使其工作,但是它非常脆弱,并且可能以未记录的方式使用访问器(也可能随时更改,恕不另行通知!)。 更新2: 正如我提到的那样,它很脆!这个想法仍然有效,但是在新版本的An

  • 问题内容: 我想在3个地方使用相同的HTML模板,只是每次使用不同的模型。我知道我可以从模板访问变量,但是名称会有所不同。 有没有办法将模型传递给ngInclude? 这是我想要实现的,当然add-variable属性现在不起作用。然后,在我包含的模板中,我将访问detailsObject及其属性。 如果我使用ng-include的方法不好,还有其他应该尝试的方法吗? 问题答案: 注意:这不是我的