Javascript 在AngularJS中,$scope是如何传递给scope的?

Javascript 在AngularJS中,$scope是如何传递给scope的?,javascript,angularjs,Javascript,Angularjs,我对控制器中$scope的使用和指令中scope的使用有点困惑。请验证我的理解是否正确,并提供一些替代方法 假设我有一个html: <div ng-controller="app1_Ctrl"> . . . <input type="text" ng-model="value"/> <input type="checkbox" /> <button ng-click="submit()"></b

我对控制器中$scope的使用和指令中scope的使用有点困惑。请验证我的理解是否正确,并提供一些替代方法

假设我有一个html:

<div ng-controller="app1_Ctrl">
    .
    .
    .
    <input type="text" ng-model="value"/>
    <input type="checkbox" />
    <button ng-click="submit()"></button>

</div>
根据AngularJS官方文档,我的app1看起来像这样

$scope.value是如何在指令中传递给scope的,以便我可以在那里进行一些操作的?ng是否会单击指令链接中的函数submit?使用scope.$watch在checkbox元素中侦听已勾选或未勾选的操作是否正确


非常感谢那些能够解释的人。

默认情况下,指令范围是controller$scope;但这意味着指令直接依赖于您的控制器,您需要为要使用的指令的每个实例使用不同的控制器。通常认为最好的做法是隔离指令范围,并明确定义希望从控制器传递的变量。 为此,您需要在指令中添加范围语句:

scope {
   label :'@',
   context : '=',
   function : '&'
}
并更新您的视图:

<my-directive label="labelFromController" context="ctxtFromController" function="myFunction()" ></my-directive>
符号表示您希望传递的内容:@表示指令中作为字符串的单向绑定,=表示对象的双向绑定,使指令能够更新控制器中的内容,&表示传递函数。 有很多额外的选项和微妙之处可以通过Angular doc得到最好的解释。还有一些不错的教程,例如

您的提交功能未附加到任何内容,因此您将无法从查看器中调用if。您需要将其定义为scope.submit=函数。。。如果您希望访问,请在链接功能中。 您可以使用$watch来实现这类功能,但通常还有其他更优雅的方法来实现这一点,方法是利用angular已经观察到的变量,并监控任何更改。例如,当某些外部服务更改数据时,这可能是一个问题,因为angular听不到它不知道的事件。在这里,您可能只需将ng model指令与输入复选框相关联,以存储其true/fale checked/unchecked值,并使用ng change或ng click指令对其进行操作。最佳解决方案主要取决于业务逻辑的确切性质。 还有一些想法:

指令内部的HTML应打包在内联模板字段中,或打包在指令中templateUrl字段引用的单独HTML文件中。 在上面的HTML代码中,您的指令没有在任何地方引用。它应该是一个元素、属性或类,并且您的指令定义应该通过restrict字段反映调用它的方式。也许您省略了包含指令HTML的行,但就目前情况而言,您的指令没有做任何事情。 据我所知,你不需要返回链接。将其视为指令的主体,在其中定义将在HTML中调用的变量和函数。 您的指令实际上并不需要HTML代码,而且如果您朝着不同的方向走,上述想法可能无关紧要,但是封装某种要重用的视图行为可能是指令最常用的用法。
首先,它应该是[$scope,function$scope{…注意引号。好的,我已经在$scope周围加了引号。另外,你必须在函数内加上返回链接。所以它应该是function link{…};返回链接;简短的回答是,$scope只是参数的一个占位符。按照惯例,如果您愿意,可以将其称为param1。$用于帮助保持其唯一性,但除了任何字符外,没有其他用途。重要的部分是框架读取并将保留的单引号$scope缩小。
scope {
   label :'@',
   context : '=',
   function : '&'
}
<my-directive label="labelFromController" context="ctxtFromController" function="myFunction()" ></my-directive>