如果我们初始化为null,angular.js@local-scope属性将显示为未定义

angular.js @local scope property coming as undefined if we initialized as null

本文关键字:属性 显示 未定义 js@local-scope 我们 初始化 null 如果 angular      更新时间:2023-09-26

我制作了自定义角度指令

 <location zipcode="35423" cityname="" statecode=""></location> 

并采取

  scope: {
                    zipcode: "@",
                    cityname: "@",
                    statecode: "@"
                },

该指令的控制者:

 controller: function ($scope, $filter) {
$scope.zipcode = "35423" // here i get the values
$scope.cityname = undefined // ?? why?
$scope.statecode= undefined // ?? why?
}

我想要$scope.cityname = ""

事实上,我使用的是mvc应用程序

zipcode="@ZipCode" cityname="@City" statecode="@StateCode"

并且CCD_ 2可能是空

如果作用域属性未定义,则可以将其值设置为"",例如:$scope.cityname = $scope.cityname || "";

我不明白你为什么要这么做,因为""undefined的评估结果都是false。

这似乎是一个范围隔离问题。

发生的情况是,您的指令将使用控制器中的三个值填充其作用域,并且由于您在作用域隔离中使用@,因此无论是否定义了值,指令都将从控制器中获取值并以一种方式绑定。

由于绑定是一种方式,控制器中的更改将反映到指令中,但指令中对这些值的更改不会反映到控制器中。这意味着,如果您更改指令中的值,例如将cityName设置为Islamabad,则控制器将不知道此更改,并将保留旧值,如果变量从未初始化,则旧值很可能是未定义的。

如果要双向绑定,请使用=而不是@。这样,对这些变量的指令变化将反映在控制器中。

链接到范围隔离文章:创建自定义AngularJS指令