我有以下
angularjs指令:
app.directive("partnersInfoView", function ($http) {
return {
restrict: 'A',
link: function ($scope, element) {
$http.get("/home/PartnerInfoTab") // immediately call to retrieve partial
.success(function (data) {
element.html(data); // replace insides of this element with response
});
}
};
});
它基本上转到MVC控制器并返回局部视图
public ActionResult PartnerInfoTab()
{
return PartialView("../ManagePartners/PartnerInfoTab");
}
在父视图中,我有以下声明:
<div id="genericController" ng-controller="GenericController">
<div partners-info-view></div>
</div>
这是利用angular指令渲染局部视图,到目前为止一切都很好.在我的angular genericController里面我有一个范围变量:
$scope.Data = data;
数据是一个json对象,来自Rest Service的响应
Json回应,例如
{[
{"firstName":"John", "lastName":"Doe"},
{"firstName":"Anna", "lastName":"Smith"},
{"firstName":"Peter", "lastName":"Jones"}
]}
我遇到的问题是我无法在指令模板中绑定$scope.Data变量:
<div id="PartnerInfoTab">
<div class="form-group">
<label class="col-md-2 control-label">Name</label>
<div class="col-md-8">
<input id="txt_name" class="form-control" type="text" ng-model="Data.firstName">
</div>
</div>
</div>
我的问题是,如何将父作用域传递给angular指令,以便能够对局部视图中的元素进行数据绑定.我错过了什么?
提前致谢.
最佳答案 我没有看到使用$http.get手动获取模板然后将其插入DOM.你可以简单地在指令配置中给出templateUrl值,而angular将获取模板并为你编译它.
app.directive("partnersInfoView", function ($http) {
return {
restrict: 'A',
templateUrl: '/home/PartnerInfoTab',
link: function (scope, element, attr) {
// Do linking
}
};
});
而且,您的partnersInfoView不会创建隔离范围.因此,您可以访问partnersInfoView的父范围值的值.请参阅下面的代码段.
var app = angular.module('app', []);
app.run(function($templateCache) {
// Simulating the fetching of /home/PartnerInfoTab template
var template = '<div id="PartnerInfoTab">' +
'<div class="form-group">' +
'<label class="col-md-2 control-label">Name</label>' +
'<div class="col-md-8">' +
'<input id="txt_name" class="form-control" type="text" ng-model="Data[0].firstName">' +
'<input id="txt_name" class="form-control" type="text" ng-model="Data[1].firstName">' +
'<input id="txt_name" class="form-control" type="text" ng-model="Data[2].firstName">' +
'</div>' +
'</div>' +
'</div>';
$templateCache.put('/home/PartnerInfoTab', template);
});
app.controller('GenericController', function($scope) {
$scope.Data = [{
"firstName": "John",
"lastName": "Doe"
}, {
"firstName": "Anna",
"lastName": "Smith"
}, {
"firstName": "Peter",
"lastName": "Jones"
}];
});
app.directive("partnersInfoView", function($http) {
return {
restrict: 'A',
templateUrl: "/home/PartnerInfoTab",
link: function($scope, element) {
// linking
}
};
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app">
<div id="genericController" ng-controller="GenericController">
<div partners-info-view></div>
</div>
</div>