angular: 嵌套指令 ngmodel
angular: nested directive ngmodel
假设我们有一个带有嵌套指令的指令。这两个指令都希望在数据显示之前更改数据。我使用 ngModelController 来做到这一点,但我愿意接受其他建议。
我的问题:如果不使用 scope.$apply() 我无法让它工作,但另一方面 scope.$apply() 在我使用它时会抛出一个错误,这表明它是不必要的。
这里是问题的答案:http://embed.plnkr.co/RROBxuITLpYnGkHSQAe3/preview
我做错了什么?
我认为您应该阅读更多关于 ngModelController
的内容,尤其是 $formatters
$parsers
和 $render
。这是很棒的教程:http://www.chroder.com/2014/02/01/using-ngmodelcontroller-with-custom-directives/. They are also explaind in that question: ngModel Formatters and Parsers
在您的情况下,您可以将 $watch
替换为格式化函数。当从控制器更改值时调用格式化程序。您可以在格式化程序函数中操作数据,然后将其设置为 $viewValue
。好的做法是尽可能少地使用 $watches。
此外,恕我直言,使用:
scope: {
myVal: '=ngModel'
}
看起来很糟糕。对于将使用您的代码的其他程序员来说,这可能会造成混淆。 ngModel
应该放在 require
属性.
中使用
假设我们有一个带有嵌套指令的指令。这两个指令都希望在数据显示之前更改数据。我使用 ngModelController 来做到这一点,但我愿意接受其他建议。
我的问题:如果不使用 scope.$apply() 我无法让它工作,但另一方面 scope.$apply() 在我使用它时会抛出一个错误,这表明它是不必要的。
这里是问题的答案:http://embed.plnkr.co/RROBxuITLpYnGkHSQAe3/preview
我做错了什么?
我认为您应该阅读更多关于 ngModelController
的内容,尤其是 $formatters
$parsers
和 $render
。这是很棒的教程:http://www.chroder.com/2014/02/01/using-ngmodelcontroller-with-custom-directives/. They are also explaind in that question: ngModel Formatters and Parsers
在您的情况下,您可以将 $watch
替换为格式化函数。当从控制器更改值时调用格式化程序。您可以在格式化程序函数中操作数据,然后将其设置为 $viewValue
。好的做法是尽可能少地使用 $watches。
此外,恕我直言,使用:
scope: {
myVal: '=ngModel'
}
看起来很糟糕。对于将使用您的代码的其他程序员来说,这可能会造成混淆。 ngModel
应该放在 require
属性.