我正在编写一个指令,该指令在获取邮政编码的系统中重复使用。
//postcode grabber
app.directive('postcodes',
function ($rootScope, $http) {
return function (scope, element, attrs) {
element.bind('change', function () {
var modal_element = angular.element('#myModal');
var ctrl = modal_element.controller();
var url = '/postage/postcodes/?suburb=' + element.val() + "&target_suburb=" + attrs.targetSuburb + "&target_state=" + attrs.targetState + "&target_postcode=" + attrs.targetPostcode;
ctrl.setModal(url);
modal_element.modal('show');
});
};
});
它打开了一个关于更改的引导模式窗口,该窗口有一个控制器:
function PostcodesCtrl($scope, $parse) {
$scope.populate = function (suburb, state, postcode, target_suburb, target_state, target_postcode) {
//lets grab the controller of the target postcode
var tpscope = angular.element(target_postcode).scope();
}
}
PostcodesCtrl.$inject = ['$scope', '$rootScope'];
我甚至可以使用输入元素"ID"(例如#郊区)访问目标输入字段的范围(tpscope行),但我不确定如何更新ngModel值,因为它们总是不同的名称。
这就是为什么我要将target_suburb、target_postcode等发送到服务器,然后服务器会单击ng,将它们返回到"populate"函数。
是否可以动态访问范围变量?比如$scope[随便什么]。。还是类似的?
更新:我发现我可以访问$scope[var]没有问题,但ng模型名称将有一个小数点。。。例如"模范郊区"——它似乎不喜欢那样。
如果有人对此有更好的想法,请告诉我!
对于.
的ngModel值,在指令中解析并使用它需要特殊处理。您需要使用$parse
服务在作用域的上下文中处理模型。类似的东西
var getter=$parse(attrs.ngModel);
var setter=getter.assign;
setter(scope,!getter(scope));