|
|
@@ -660,7 +660,7 @@ function compileDirectives (attrs, options) {
|
|
|
if (tokens) {
|
|
|
value = tokensToExp(tokens)
|
|
|
arg = name
|
|
|
- pushDir('bind', publicDirectives.bind, true)
|
|
|
+ pushDir('bind', publicDirectives.bind, tokens)
|
|
|
// warn against mixing mustaches with v-bind
|
|
|
if (process.env.NODE_ENV !== 'production') {
|
|
|
if (name === 'class' && Array.prototype.some.call(attrs, function (attr) {
|
|
|
@@ -729,11 +729,12 @@ function compileDirectives (attrs, options) {
|
|
|
*
|
|
|
* @param {String} dirName
|
|
|
* @param {Object|Function} def
|
|
|
- * @param {Boolean} [interp]
|
|
|
+ * @param {Array} [interpTokens]
|
|
|
*/
|
|
|
|
|
|
- function pushDir (dirName, def, interp) {
|
|
|
- var parsed = parseDirective(value)
|
|
|
+ function pushDir (dirName, def, interpTokens) {
|
|
|
+ var hasOneTimeToken = interpTokens && hasOneTime(interpTokens)
|
|
|
+ var parsed = !hasOneTimeToken && parseDirective(value)
|
|
|
dirs.push({
|
|
|
name: dirName,
|
|
|
attr: rawName,
|
|
|
@@ -741,9 +742,13 @@ function compileDirectives (attrs, options) {
|
|
|
def: def,
|
|
|
arg: arg,
|
|
|
modifiers: modifiers,
|
|
|
- expression: parsed.expression,
|
|
|
- filters: parsed.filters,
|
|
|
- interp: interp
|
|
|
+ // conversion from interpolation strings with one-time token
|
|
|
+ // to expression is differed until directive bind time so that we
|
|
|
+ // have access to the actual vm context for one-time bindings.
|
|
|
+ expression: parsed && parsed.expression,
|
|
|
+ filters: parsed && parsed.filters,
|
|
|
+ interp: interpTokens,
|
|
|
+ hasOneTime: hasOneTimeToken
|
|
|
})
|
|
|
}
|
|
|
|
|
|
@@ -787,3 +792,17 @@ function makeNodeLinkFn (directives) {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+/**
|
|
|
+ * Check if an interpolation string contains one-time tokens.
|
|
|
+ *
|
|
|
+ * @param {Array} tokens
|
|
|
+ * @return {Boolean}
|
|
|
+ */
|
|
|
+
|
|
|
+function hasOneTime (tokens) {
|
|
|
+ var i = tokens.length
|
|
|
+ while (i--) {
|
|
|
+ if (tokens[i].oneTime) return true
|
|
|
+ }
|
|
|
+}
|