在实现angularjs指令时,我在指令之间共享控制器时遇到了一些问题
我无法从下面的控制器访问enterUser指令
app.directive('entires', [function () { return { restrict: 'E', replace: true, scope : { user : '=' }, require : '^?enterUser', template:"Time : {{user.name}} Task : {{user.age}} Delete Entry", link: function (scope, iElement, iAttrs, enterUserctrl) { console.log(ctrl) //here i got enterUserctrl undefined.. // i want like to call delete function from here enterUserctrl.delete(user); } }; }])
这里是当前工作的小提琴
我稍微修改了你的代码.两个主要错误:enter-user
应该包装,entires
以便角度可以找到它require
.第二个是你需要transclude
在你的情况下使用.
看看代码
app.directive('enterUser', function () { return { restrict: "A", transclude: true, templateUrl: 'enter-user.html', controller: function ($scope) { $scope.addToList = function (name, age) { if (typeof $scope.userName != 'undefined' && typeof $scope.userAge != 'undefined') { $scope.nameList.push({ name: $scope.userName, age: $scope.userAge }) $scope.userName = ''; $scope.userAge = ''; } }; this.delete = function(user) { if (typeof user != 'undefined') { $scope.nameList.pop(); } }; } }; });
<div> <b>Name: </b> <input ng-model='userName' type='text' /> <br> <b>Age : </b> <input ng-model='userAge' type='text' /> <br> <span class='right'><button ng-click='addToList(userName, userAge);'>Add to List</button></span> <!-- insert trascluded content here --> <div ng-transclude></div> </div>
app.directive('entires', function () { return { restrict: 'E', replace: true, scope: { user: '=' }, require: '^enterUser', templateUrl: "entires.html", link: function (scope, iElement, iAttrs, enterUserCtrl) { scope.delete = function(user) { enterUserCtrl.delete(user) } } }; });
<div enter-user> <b><u>Here is my entries listed </u></b> <div ng-repeat="user in nameList"> <entires user="user"></entires> <br> </div> </div>
您的删除功能也无法正常工作.但这是件小事.