我有一个局部视图,在其中我使用了一个element指令。我想在没有隔离范围的控制器中使用该模型。 如果我使用隔离范围,则指令中未定义多重选择元素 我正在使用MVC Partial视图,Angular JS基本版本。 以下是我的快照代码:
“ _ abc.cshtml”
<div class="modal-body formpopupbody">
<multiselect name="selection" multiple="true" ng-model="Type"
ng-required="true" class="dropStyle" options="c.Value for c in TypeList" change="selected()">
</multiselect>
</div>
MultiSelect.js
.directive('multiselect', ['$parse', '$document', '$compile', 'optionParser',
function ($parse, $document, $compile, optionParser) {
return {
restrict: 'E',
require: 'ngModel',
link: function (originalScope, element, attrs, modelCtrl) {
var exp = attrs.options,
parsedResult = optionParser.parse(exp),
isMultiple = attrs.multiple ? true : false,
required = false,
scope = originalScope$new(),
changeHandler = attrs.change || anguler.noop;
var popUpEl = angular.element('<multiselect-popup></multiselect-popup>');
//required validator
if (attrs.required || attrs.ngRequired) {
required = true;
}
//watch single/multiple state for dynamically change single to multiple
scope.$watch(function () {
return $parse(attrs.multiple)(originalScope);
}, function (newVal) {
isMultiple = newVal || false;
});
//watch option changes for options that are populated dynamically
scope.$watch(function () {
return parsedResult.source(originalScope);
}, function (newVal) {
if (angular.isDefined(newVal))
parseModel();
});
//watch model change
scope.$watch(function () {
return modelCtrl.$modelValue;
}, function (newVal, oldVal) {
//when directive initialize, newVal usually undefined. Also, if model value already set in the controller
//for preselected list then we need to mark checked in our scope item. But we don't want to do this every time
//model changes. We need to do this only if it is done outside directive scope, from controller, for example.
if (angular.isDefined(newVal)) {
markChecked(newVal);
scope.$eval(changeHandler);
}
getHeaderText();
modelCtrl.$setValidity('required', scope.valid());
}, true);
element.append($compile(popUpEl)(scope));
scope.valid = function validModel() {
if (!required) return true;
var value = modelCtrl.$modelValue;
return (angular.isArray(value) && value.length > 0) || (!angular.isArray(value) && value != null);
};
function selectMultiple(item) {
item.checked = !item.checked;
setModelValue(true);
}
function setModelValue(isMultiple) {
var value;
value = [];
angular.forEach(scope.items, function (item) {
if (item.checked) value.push(item.model);
})
if (value.length == 0)
value = null;
var val = modelCtrl.$setViewValue(value);
//I want this val value in controller
}
}
};
}])
这是我的控制器
!
function () {
"use strict";
function abcCtrl($rootScope, $scope, $http, $window, $timeout, toastr, gridConstant, regEx, $uibModal) {
$scope.$on('$viewContentLoaded', function () {
$scope.Type = [];
$scope.TypeList = [];
});
$scope.SaveData = function () {
try {
//here i want access directive value
}
};
abcCtrl.$inject = ["$rootScope", "$scope", "$http", "$window", "$timeout", "toastr", "gridConstant", "regEx", "$uibModal"];
angular.module("app").controller("abcCtrl", abcCtrl);
}();
有人知道如何获得这一价值吗?