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

是否可以使用范围:true从Angular Directive更新父范围。

许嘉福
2023-03-14
问题内容

我需要从指令中的父控制器继承范围。我不一定要离开范围:false。我也不一定要使用孤立的作用域,因为要获得我确实关心的值正确链接(需要在父控制器中考虑很多值),就需要大量的工作。

scope:true如果要更新父范围,在我的指令中使用是否有意义?

<div ng-controller="MyCtrl">
      Hello, {{name}}!
        <my-directive></my-directive>
</div>



var myApp = angular.module('myApp',[]);

//myApp.directive('myDirective', function() {});
//myApp.factory('myService', function() {});

function MyCtrl($scope) {
    $scope.name = 'Dave';
}


myApp.directive('myDirective', function() {
    return {
        scope: true,
        restrict: 'EA',
        link: function(scope, elem, attrs) {
            scope.updateName = function(newName) {
                console.log('newName is: ' + newName);
                scope.name = newName;
            }
        },
        template: '<input ng-model="updatedName" placeholder="new name value"> <button ng-click="updateName(updatedName)">Update</button>'
    }
})

请检查小提琴


问题答案:

尽管@user1737909已经引用了SO问题来阅读(AngularJS中范围原型/原型继承的细微差别是什么?它将解释该问题并建议各种解决方法),但我们通常会尝试在SO上给出答案。

因此,您的小提琴无法工作的原因是因为在将原始类型(例如,字符串,数字或布尔类型)写入(例如,scope.name =newName)“写入”时,总是将其转到本地范围/对象。换句话说,子作用域获得了自己的name属性,该属性遮盖了同名的父属性。解决方法是在父范围内使用一个对象,而不是原始类型。然后,子作用域将获得对该对象的引用。对对象属性的任何写入(无论是从父对象还是从子对象)都将转到该对象。(子作用域没有得到自己的对象。)

$scope.obj = {name: 'Dave'};

然后在您的指令中:

scope.obj.name = newName;

和HTML:

Hello, {{obj.name}}!

[fiddle](http://jsfiddle.net/mrajcok/c8pZs/)



 类似资料:
  • 问题内容: 我有两个控制器,一个封装在另一个中。现在,我知道子范围从父范围继承属性,但是有没有办法更新父范围变量?到目前为止,我还没有遇到任何明显的解决方案。 在我的情况下,我在表单中有一个日历控制器。我想从父范围(即表单)更新开始日期和结束日期,以便表单在提交时具有开始日期和结束日期。 问题答案: 您需要在父作用域中使用一个对象(不是原始对象),然后就可以直接从子作用域中更新它 上级: ctrl

  • 问题内容: 我有一个可选参数,它本身支持参数列表。 我的意思是,它应该支持: -f 1 2 -f 1 2 3 但不是: -f 1 -f 1 2 3 4 有没有办法在argparse中强制执行此操作?现在,我使用nargs =“ *”,然后检查列表长度。 编辑: 根据要求,我需要的是能够定义一个可接受数量的参数范围。我的意思是说(在示例中)2或3个args是正确的,但不是1或4或不在2..3范围内的

  • 单例 原型 请求 会话 全球会话

  • 问题内容: 我有一个带有隔离范围的指令,该指令的值具有两种方式绑定到父范围。我正在调用一个方法来更改父作用域中的值,但是更改未应用到我的指令中。(不触发双向绑定)。 但是我不是从指令中更改值,而是仅在父范围中更改它。我阅读了解决方案,并指出了第五点: 这意味着当我的父值更改为2时,将触发监视。它检查父值和指令值是否相同-如果不相同,则将其复制到指令值。好的,但是我的指令值仍然是1 …我缺少什么?

  • 问题内容: 尽管在ChildCtrl中实例化了一个“新”变量,我如何进行变量更改并将其轻松传播回ParentCtrl?加分点数最少,甚至没有$ on和$ watch(使其更易于实现) ParentCtrl ChildCtrl / ChildCtrl2 / ChildCtrl3 / ChildCtrl4 视图 我的ChildCtrl的区别就足够大了,我无法轻松抽象出主布局和ng-view,但是它们都

  • 谷歌在搜索答案方面让我失望,所以我现在转到这里。 我正在使用pytest和selenium设置一个自动web测试套件。在运行测试之前,我想先编写代码来检查chromewebdriver的更新。我认为最好的方法是使用fixture和webdriver\u manager模块。 我从以下开始,它起作用了 但每次测试都要检查webdriver的更新,这确实会减慢速度。因此,我尝试了这一点,但不知道如何让