Javascript 在angular中使用$parent是一种好的做法吗?
我是Angular领域的新手,我想知道使用Javascript 在angular中使用$parent是一种好的做法吗?,javascript,angularjs,coding-style,Javascript,Angularjs,Coding Style,我是Angular领域的新手,我想知道使用$parent全局变量访问父范围是否是一种好的做法。例如,数据ng if会创建一个孤立的作用域,这有时会导致访问父作用域时出现一些问题,因此唯一的方法是$parent.myVariable 任何示例,任何确保我的代码干净并遵循良好实践的建议都是值得注意的。如果ng if指令应该看到父范围,不管它是什么 在指令上隔离作用域的情况下,最好通过接口向下传递$scope对象,而不要指望$parent上存在属性: app.controller("myCtrl",
$parent
全局变量访问父范围是否是一种好的做法。例如,数据ng if
会创建一个孤立的作用域,这有时会导致访问父作用域时出现一些问题,因此唯一的方法是$parent.myVariable
任何示例,任何确保我的代码干净并遵循良好实践的建议都是值得注意的。如果
ng if
指令应该看到父范围,不管它是什么
在指令上隔离作用域的情况下,最好通过接口向下传递$scope
对象,而不要指望$parent
上存在属性:
app.controller("myCtrl", function($scope){
$scope.foo = "bar";
});
app.directive("myDirective", function(){
return {
scope: {
// expect foo to be passed to the directive
// = means conserve bi directional binding
foo: "="
},
link: function(scope) {
... // scope.foo is defined
}
}
});
在视图中
<div ng-controller="myCtrl">
<my-directive foo="foo"></my-directive>
</div>
最佳实践是使您的指令解耦,它应该是自包含的,如果指令需要外部方面,您可以插入它们或绑定它们。依靠在特定环境中使用的东西是不好的 一个例子是:
<div ng-controller="Parent as parent">
<div ng-if="parent.showMessage">
Some simple message.
</div>
<div child-one parent="parent"></div>
</div>
这样做似乎完全可以
<div ng-app ng-controller="NameCtrl">
<div ng-controller="ChildCtrl as vm">
{{$parent.names}}
</div>
</div>
function NameCtrl($scope) {
$scope.names = ["Tom", "Dick", "Harry"];
}
function ChildCtrl($scope) {
$scope.parentnames = $scope.$parent.names;
}
{{$parent.names}
函数名Ctrl($scope){
$scope.names=[“汤姆”、“迪克”、“哈利”];
}
函数ChildCtrl($scope){
$scope.parentnames=$scope.$parent.names;
}
见:
从良好实践的角度来看,这种方法也很好,因为您还可以销毁不需要的作用域,这样它们就不会保留在缓冲区中
然而,John Papa建议不要使用
$parent
:。相反,他希望您使用控制器作为
语法。这不是一个好的做法,它会给您带来麻烦。假设您有一个绑定到控制器的
和一个
,您决定在潜水{{$parent.myVariable}}
中使用。如果需要嵌套在另一个ng if
,会发生什么?或者在的情况下删除唯一的ng
我建议您将变量保存在控制器$scope
变量中存储的对象中。
所以你的控制器里应该有这样的东西
$scope.MyValues = {};
$scope.MyValues.myVariable = 5;
现在,您可以避免在
中使用$parent
并安全地查找{{MyValues.myVariable}}
,angular将通过$parent
返回,直到找到MyValues
对象,因此,如果出现范围问题,您可以(几乎)忘记ng。这同样适用于嵌套控制器
这里是对此类最佳实践的快速引用:如果
没有创建隔离范围,则执行ng;它创建一个继承的作用域。
$scope.MyValues = {};
$scope.MyValues.myVariable = 5;