Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 添加指令作用域使其余部分不可更新_Javascript_Angularjs - Fatal编程技术网

Javascript 添加指令作用域使其余部分不可更新

Javascript 添加指令作用域使其余部分不可更新,javascript,angularjs,Javascript,Angularjs,有一个名为foo的指令,其定义如下: <div ng-app="app" ng-controller="mainController"> {{ name }} <foo param="123"></foo> </div> return { restrict : 'E', controller : function($scope){ $scope.name = 'Name

有一个名为
foo
的指令,其定义如下:

<div ng-app="app" ng-controller="mainController">
   {{ name }}

   <foo param="123"></foo>
</div>
    return {
        restrict : 'E',
        controller : function($scope){
            $scope.name = 'Name defined in directive';
            console.log($scope.param); // 123 as expected
        },
        scope : {
          param : "@"
        }
    }
按预期工作,并使用指令中定义的
名称覆盖
初始名称

但是,由于有
param
属性,我想访问它的值。所以我做了这样的单向绑定:

<div ng-app="app" ng-controller="mainController">
   {{ name }}

   <foo param="123"></foo>
</div>
    return {
        restrict : 'E',
        controller : function($scope){
            $scope.name = 'Name defined in directive';
            console.log($scope.param); // 123 as expected
        },
        scope : {
          param : "@"
        }
    }

这破坏了父作用域的更新。现在运行此命令时,它将呈现
初始名称
,而不是指令
中定义的预期
名称。那么这里的问题是什么呢?

当您使用scope选项时,您创建了一个根据定义与父作用域分离的隔离作用域

您需要将
name
添加到隔离作用域中,并像
param
一样将其传入,或者需要删除作用域并在父作用域上定义
param

下面是关于隔离作用域的说明:

顾名思义,该指令的隔离作用域隔离除已显式添加到作用域{}哈希对象的模型之外的所有对象。这在构建可重用组件时非常有用,因为它可以防止组件更改模型状态,但显式传入的模型除外

注意:通常,作用域原型从其父级继承。独立作用域不存在。有关隔离作用域的更多信息,请参阅“指令定义对象-作用域”部分


name
上的双向绑定是不够的,因为它是基本类型(字符串)。它应该是类似于
model.name的属性,或者在name change=“name=newName”
上使用表达式绑定
,双向绑定可以很好地处理字符串。演示:哎哟,看起来你是对的(即使在从withinthe指令更新变量时也是如此)。我不知道为什么我有这样的假设,但事实并非如此,很抱歉当时的评论有误导性。