2014-11-14 83 views
0

我对Angular指令有疑问。以下是我的代码:自定义/条件操作的角度指令

主控制器&的指令:

<div ng-controller='ShopsController'> 
    <update-createform shop="shop" action='update()'></update-createform> 
</div> 

指令JS: (这样的方向作用将采取 '动作' 输入参数)

angular.module('app') 
.directive('updateCreateform', function(){ 
    return { 
    templateUrl: '/form.html', 
    restrict : 'E', 
    scope: { 
     shop: '=', 
     action: '&' 
    } 
    } 
}) 

形式.html模板:

<form name="shopForm" ng-submit='action(shopForm.$valid)' novalidate> 
<input type='text' name='name' required/> 
<input type='text' name='description' required/> 
</form> 

ShopsContr奥勒有一个方法:

exports.update = function(isValid) { 
    if (isValid) { /* update the shop*/ } 
} 

什么我做的是我传递的店铺数据我从服务器获取,发送到表单,因此我可以查看和/或更新店铺信息。

这也是我想使用相同的形式创建店铺信息。在这种情况下,我只需发送shop = []和action ='create()'。

我的控制器有一个采用参数isValid的更新方法。我不知道如何通过指令shopForm。$有效的外部并将其发送到服务器。

两个问题:

  1. 我如何才能的IsValid变量从指示?
  2. 继阿里·勒纳的NG-书:他说,这是可能做到以下几点:

http://www.scribd.com/doc/215682987/NG-Book-The-Complete-Book-on-AngularJS-2013

,而不是上面我们使用

<update-createform shop="shop" on-update='update()' on-create='create()'></update-createform> 

,并指令“动作”使用指令当店铺不空时,将更改为“更新”,否则操作等同于“创建”?我试过他的代码,但我不能得到它的工作..

任何帮助将不胜感激!

+0

它应该是'<更新店的CreateForm = “店” 行动='exports.update() “>'?您是否尝试过使用指令的链接函数并使用console.log来查看正在传入的“动作”? – james 2014-11-14 18:07:52

回答

1

您可以将参数添加到action=update(isValid)。然后这将在表单提交中得到解决。

所以你的HTML看起来像这样

<div ng-controller='ShopsController as shopCtrl'> 
    <update-createform shop="shop" action='shopCtrl.update(isValid)'></update-createform> 
</div> 

和你的形式看起来像这样

<form name="shopForm" ng-submit='action({isValid:shopForm.$valid})' novalidate> 
    <input type='text' name='name' required/> 
    <input type='text' name='description' required/> 
    <button type="submit">Submit</button> 
</form> 

和控制器将

.controller('ShopsController', function() { 

    var exports = this; 

    exports.update = function(isValid) { 
    console.log(isValid) 
    if (isValid) { /* update the shop*/ } 
    } 
}) 

http://plnkr.co/edit/Qh3HzKGnOo1NTP9Pfsmh?p=preview

还有另一种方法,虽然我个人觉得语法有点奇怪。并不是说第一个解决方案也能感觉到这一点。

http://plnkr.co/edit/CRN9ruRekJiozJIBTe80?p=preview

发现有一个在一个优越的交大约指令由Dan Wahlin

http://weblogs.asp.net/dwahlin/creating-custom-angularjs-directives-part-3-isolate-scope-and-function-parameters

+0

此代码不知道为我工作。我在控制器中添加了一条警告('有效')声明并尝试提交代码。即使表格为空,它也会显示“有效”。也许我错过了什么? – 2014-11-15 18:55:56

+0

你看过那个笨蛋吗? – james 2014-11-15 20:08:50

+0

是的,我做到了。如果将.js行更改为if(isValid){alert(123)},则只有在表单通过验证时才会触发警报?但不知何故,即使表格为空,我也会得到警报(123)。 – 2014-11-16 03:13:17