Javascript 带有$rootScope变量的ng init,初始化问题
我有一个rootscope变量Javascript 带有$rootScope变量的ng init,初始化问题,javascript,angularjs,Javascript,Angularjs,我有一个rootscope变量 //we keep it false here, on HTML page if any line item is displayed in edittable form,it will be initialized to True $rootScope.varToDecideDispalyofSaveButtonOn10A =false; 我正在尝试在标记页上初始化它 . . . <tr class="BG8" ng-if="(obj.l
//we keep it false here, on HTML page if any line item is displayed in edittable form,it will be initialized to True
$rootScope.varToDecideDispalyofSaveButtonOn10A =false;
我正在尝试在标记页上初始化它
.
.
.
<tr class="BG8" ng-if="(obj.lineItemEditableForPM)" ng-init="varToDecideDispalyofSaveButtonOn10A='true'">
.
.
.
。
.
.
.
.
.
虽然ng如果此处为真且tr已创建,但变量未定义,为什么
ng如果
此指令创建新的子作用域。这是你的电话号码
因此,您可以通过在rootScope中创建一个对象而不是普通变量来实现这一点,然后angular将首先在子范围中搜索something.vartodecidedispalyofsavebutton10a
,查找后,在子作用域中没有something.vartodecidedispalyofsavebutton10a
它将在父作用域中搜索something.vartodecidedispalyofsavebutton10a
。但是如果你使用一个普通变量(就像你尝试使用对象一样),angular就会知道没有任何变量被称为vartodecidedispalyofsavebutton10a
,如果不在父范围内搜索它,它就会创建一个名为vartodecidedispalyofsavebutton10a
<tr class="BG8" ng-if="(obj.lineItemEditableForPM)" ng-init="something.varToDecideDispalyofSaveButtonOn10A=true">
或
您可以通过使用$parent
在子范围内引用父范围进行存档,如下所示
<tr class="BG8" ng-if="(obj.lineItemEditableForPM)" ng-init="$parent.varToDecideDispalyofSaveButtonOn10A=true">
在这种情况下,您将根据obj.lineItemEditableForPM
的值更改vartodecidedispalyofsavebutton10a
的值如果obj.lineItemEditableForPM
true,angular将在子作用域和父作用域中搜索vartodecisedispalyofsavebutton10a
。因为您不需要像上面两种情况那样初始化变量如果obj.lineitemdeditableforpm
false,则只返回false
,而不更改vartodecitedispalyofsavebutton10a的值
这里有一个angular js中的一个常见陷阱,就是在一个作用域中使用原语变量,并试图从它的作用域中更改它(任何作用域都从$rootScope继承)
这不起作用的原因是,基元变量不是引用(只有对象和数组是引用),因此,继承的作用域会获得一个同名的新变量
因此,只要您想利用范围继承,就应该使用对象(实际上,始终这样做可能是一个很好的约定):
在我看来
<tr class="BG8" ng-if="(obj.lineItemEditableForPM)" ng-init="SomeVars.varToDecideDispalyofSaveButtonOn10A='true'">
改用ng controller…ng controller进行初始化?ng如果创建了一个新的作用域,并在其上添加了属性。可能您正试图从ng if作用域之外访问此属性。顺便说一句,您应该编写:SomeVars.vartodecidedispalyyofsavebutton10a=true,不带撇号是的,要使变量成为布尔值的true类型,我的代码实际上是使它成为字符串的true类型。:)谢谢
<tr class="BG8" ng-if="(obj.lineItemEditableForPM ? (varToDecideDispalyofSaveButtonOn10A = true) : false)">
$rootScope.SomeVars = { varToDecideDispalyofSaveButtonOn10A : false };
<tr class="BG8" ng-if="(obj.lineItemEditableForPM)" ng-init="SomeVars.varToDecideDispalyofSaveButtonOn10A='true'">