Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.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 带有$rootScope变量的ng init,初始化问题_Javascript_Angularjs - Fatal编程技术网

Javascript 带有$rootScope变量的ng init,初始化问题

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

我有一个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.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'">