я сделал пользовательскую угловую директиву
<location zipcode="35423" cityname="" statecode=""></location>
и возьми
scope: {
zipcode: "@",
cityname: "@",
statecode: "@"
},
в contoller этой директивы:
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
может быть нулевым
Вы можете установить значение свойств области ""
если они не определены так: $scope.cityname = $scope.cityname || "";
$scope.cityname = $scope.cityname || "";
,
Я не понимаю, почему вы это сделаете, поскольку ""
и undefined
оба оцениваются как false.
Это похоже на проблему изоляции области.
Что происходит, так это то, что ваша директива будет заполнять область действия, используя три значения из контроллера, и поскольку вы используете @
в изоляции по объему, ваша директива будет принимать значения из контроллера и связывать их в одну сторону, независимо от того, определены они или нет.
Поскольку привязка является одним из способов, изменения в контроллере отразятся в директиве, но изменения этих значений в директиве не отразятся в контроллере. Это означает, что если вы измените значение в директиве, например setNameName Islamabad
, то контроллер не узнает об этом изменении, и он сохранит с ним старое значение, которое вполне может быть неопределенным, если переменная никогда не была инициализирована.
Если вы хотите двухстороннюю привязку, используйте =
вместо @
. Таким образом, изменения в директиве к этим переменным будут отражены в контроллере.
Ссылка на статью о разметке области: создание пользовательских директив AngularJS