我制作了自定义角度指令
<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"
可能City
可能为空
答案 0 :(得分:0)
这似乎是范围隔离问题。
正在发生的事情是你的指令将使用来自控制器的三个值来填充其范围,并且因为你在范围隔离中使用@
,你的指令将从控制器获取值并以一种方式绑定它,无论是他们是否定义。
由于绑定是一种方式,控制器中的更改将反映到指令中,但指令中对这些值的更改不会反映在控制器中。这意味着如果您更改指令中的值,例如将cityName设置为Islamabad
,那么控制器将不知道此更改,并且它将保留旧值,如果变量是变量,则很可能未定义从未初始化。
如果您想要双向绑定,请使用=
代替@
。这样,指令中对这些变量的更改将反映在控制器中。
链接到范围隔离文章:Creating custom AngularJS directives
答案 1 :(得分:0)
如果范围属性未定义,则可以将范围属性的值设置为""
:$scope.cityname = $scope.cityname || "";
。
我不明白为什么你会这样做,因为""
和undefined
都评估为假。